reactjs 多个项目的通用MUI主题

cgvd09ve  于 2023-06-05  发布在  React
关注(0)|答案(1)|浏览(156)

使用createTheme我已经为我的项目创建了一个主题,它工作正常。我的问题是,我如何在不再次复制它的情况下将该特定主题用于我的其他项目。
我问这个问题。Mui团队回答说:“关于你的问题,你可以将你的主题存储在一个“共享”存储库中,并将这个存储库作为你所有项目的依赖项。一旦在共享仓库中更改了主题,所有其他项目都将获得更改。
请告诉我一个有效的使用方法。2如何创建共享仓库。

mnowg1ta

mnowg1ta1#

我试着从博客文章Extending the theme in Material UI with TypeScript中实现一些解决方案:
在共享项目/组件库中,我创建了一个ThemeInterface.ts文件。此文件具有我希望在项目中使用的额外属性。

import { Theme } from '@mui/material/styles';
export type Modify<T, R> = Omit<T, keyof R> & R;

export type CustomTheme = Modify<
  Theme,
  {
    space: {
      small: number,
      general: number,
    },
    borderRadius: {
      general: number
    },
    layout: {
      sidebar: {
        citizenBackGroundColor: React.CSSProperties['color'];
      };
    };
  }
>;

然后我在创建主题的地方使用它(这仍然在共享项目中)

import { createTheme } from '@mui/material';
import { CustomTheme } from './ThemeInterface';
export function createCustomTheme(): CustomTheme {
    const baseTheme = createTheme({
    //Here you can set your palettes etc.. 

    });

    return {
        ...baseTheme,
     //Here comes the properties that we added before 
        space: {
            small: 2,
            general: 4,
        },
        borderRadius: {
            general: 2,
        },
        layout: {
            sidebar: {
                //themeColors.secondary is just a const 
                citizenBackGroundColor: themeColors.secondary
            }
        },
    }
}

我已经设置了我的组件库与上卷的故事书。
在使用共享主题的项目中,您现在可以执行以下操作:

// App.tsx
const theme = createCustomTheme();

 <ThemeProvider<CustomTheme> theme={theme}>

顺便说一句当在你的组件中使用storybook的时候,你可能需要这样使用theme,否则它将无法识别你的输入。但这在消耗项目中不应该需要。

const theme = useTheme<CustomTheme>();

相关问题