【发布时间】:2021-08-23 16:58:25
【问题描述】:
我在我的项目中使用 Material UI,同时,我们有一个组件库(一个包含许多共享 React 组件的 npm 包)。
库中的这些组件也是基于 Material UI。
因此,当我从库中导入这些组件以在我的项目中使用时,它会将 <styles> 块复制到正在使用的某个组件(例如 MuiButtonBase-root)。
基于此,当第二个 MuiButtonBase-root 出现时,它会重置一些 css 样式。
有解决办法吗?
编辑 1:
这是一个示例,可能组件不是按此顺序排列的,因为我不确定问题发生的顺序。
// myProject
import { AppBar, Tabs, Tab, ThemeProvider } from '@material-ui/core';
import { Button, SharedComponentProvider } from '@shared-components'; // components based on MUI
function App() {
return (
<SharedComponentProvider>
<ThemeProvider theme={fooTheme}>
<AppBar position="static">
<Tabs>
<Tab label="Item One" />
<Tab label="Item Two" />
<Tab label="Item Three" />
</Tabs>
</AppBar>
<Button>Click me</Button>
</ThemeProvider>
</SharedComponentProvider>
);
}
SharedComponentProvider 是这样的:
import { StylesProvider, createGenerateClassName } from '@material-ui/core/styles';
const generateClassName = createGenerateClassName({
seed: 'shared-components',
});
function SharedComponentProvider({ children }: any) {
return (
<ThemeProvider theme={sharedTheme}>
{ children }
</ThemeProvider>
);
}
由于Tab组件也是基于MUI的Button组件,所以会创建两个<style>标签,里面有. MuiButtonBase-root,这样就可以结束了。
【问题讨论】:
-
你能分享一些代码 sn-ps 以便更容易理解这个问题吗?您使用的是 Next.js、CRA 还是 Gatsby?你在用ThemeProvider吗?
-
当然,我会的
-
@NirmalyaGhosh,已更新
-
您是否在应用程序中导入ThemeProvider?
-
@NirmalyaGhosh 是的,我再次更新了它,提供了有关提供商的更多详细信息
标签: reactjs material-ui