只想要知道解法請跳至解決方法。
ThemeProvider無法渲染CSS至其他專案或npm package的共用MUI元件,致原本設定好的CSS主題失效。(我就是在製作共用MUI元件庫的過程中遇到這個問題。)
其他來源的共用元件自帶MUI渲染程式碼。當網頁開始渲染時,原專案自己的MUI渲染程式碼和其他來源的MUI渲染程式碼都會同時執行,且其他來源渲染的CSS格式位階高過原專案CSS格式,故導致原專案的CSS主題失效。
既然外來元件自帶MUI渲染程式碼,那就讓外來元件也輸出自己的,並在原專案將設定CSS主題餵給外來的ThemeProvider,透過這個方法可以讓外來元件可以吃到CSS主題。
外來元件
import React from "react";
import { Theme, ThemeProvider} from "@mui/material/styles";
export interface ThemeInheritorProps {
theme: Theme;
children: React.ReactNode
};
export default function ThemeInheritor({ theme, children }: ThemeInheritorProps) {
return (
<ThemeProvider theme={theme}>
{children}
</ThemeProvider>
);
}
原專案
import { ThemeInheritor } from "YOURLIBRARY";
...
<StyledEngineProvider injectFirst>
<ThemeProvider theme={muiTheme}>
<ThemeInheritor theme={muiTheme}>
...
</ThemeInheritor>
</ThemeProvider>
</StyledEngineProvider>
以上方法就可以解決ThemeProvider不能用在共用元件的問題了。如果有任何問題,歡迎給我反饋。老實說,我用MUI跑了幾個專案,我的感想是:MUI不錯用,但還是有改善空間。主要來自於兩點: