Material-UI - 支持 babel-plugin-react-css-modules 和 rtl app

che*_*nop 2 reactjs material-ui react-css-modules jss babel-plugin-react-css-modules

材料界面:v4.8.2
反应:v16.12.0

babel-plugin-react-css-modules 和 rtl 应用程序 - 我想使用 injectFirst 但后来我收到警告: Material-UI: you cannot use the jss and injectFirst props at the same time.

我的猜测是我应该对 jss 进行不同的定义,以便它支持 rtl 和 css 模块。

// Configure JSS - How should I add here the css-modules styles?
const jss = create({ plugins: [...jssPreset().plugins, rtl()] }); 
Run Code Online (Sandbox Code Playgroud)

对于 rtl 我应该这样做:

// Configure JSS
const jss = create({ plugins: [...jssPreset().plugins, rtl()] });

<StylesProvider jss={jss}>
            <ThemeProvider theme={theme}>
                <AppContainer />
            </ThemeProvider>);
        </StylesProvider>
Run Code Online (Sandbox Code Playgroud)

对于 css-modules 样式,我应该这样做:

<StylesProvider injectFirst>
            <ThemeProvider theme={theme}>
                <AppContainer />
            </ThemeProvider>);
        </StylesProvider>

Run Code Online (Sandbox Code Playgroud)

任何人都可以请建议我应该如何结合两者?

che*_*nop 5

终于解决了。

请执行下列操作:

jss-insertion-point在下面添加<head>

<head>
     <!-- jss-insertion-point -->
     ...
</head>
Run Code Online (Sandbox Code Playgroud)

根.js:

    import rtl from 'jss-rtl';
    import { StylesProvider, jssPreset } from '@material-ui/core/styles';

    let jss = create({
      plugins: [...jssPreset().plugins, rtl()],
      insertionPoint: 'jss-insertion-point',
    });

    const Root = () => (
       <Provider store={store}>
           <StylesProvider jss={jss}>
               <ThemeProvider theme={theme}>
                    <Router history={history} routes={routes}/>
               </ThemeProvider>);
           </StylesProvider>
       </Provider>
    );

export default Root;
Run Code Online (Sandbox Code Playgroud)