Material UI 0.2 倍与 React 16 的兼容性
Material UI 0.2x compatibility with React 16
尝试从 React 15.4 升级到 React 16.4.1(也将 react-dom 升级到 16.4.1)后,我从路由器收到此错误消息:
TypeError: _nextProps.children is not a function
at ReactDOMServerRenderer.render (/var/www/web/node_modules/react-dom/cjs/react-dom-server.node.development.js:2491:55)
at ReactDOMServerRenderer.read (/var/www/web/node_modules/react-dom/cjs/react-dom-server.node.development.js:2354:19)
at renderToString (/var/www/web/node_modules/react-dom/cjs/react-dom-server.node.development.js:2726:25)
at render (/var/www/web/server/routes/others.jsx:141:24)
at process._tickCallback (internal/process/next_tick.js:68:7)
代码:
const render = () => {
const body = renderToString(
<MuiThemeProvider muiTheme={muiTheme}>
<ThemeProvider theme={theme}>
<Provider store={store}>
<IntlProvider>
<RouterContext {...renderProps} />
</IntlProvider>
</Provider>
</ThemeProvider>
</MuiThemeProvider>
);
render
在此处定义,但随后在同一路由文件中返回:
Promise.all(prefetchData(renderProps, store))
.then(render)
.catch(prefetchError => next(prefetchError));
我遵循 recommended instructions 以便从 React 15.x 升级到 React 16.x
因为我发现了有关 material-ui 与 React 16 兼容性的相关问题:
https://github.com/mui-org/material-ui/issues/8434
https://github.com/mui-org/material-ui/issues/7795
我想知道这个错误消息是否可能是由于 material-ui 0.2x 和 React 16.x 之间的不兼容引起的,或者换句话说,我想知道如果有必要升级到 material-ui 1.x 以便能够使用 React 16.x
我们使用 material-ui 0.18.1
和 React 16.3
进行客户端渲染,一切正常。我不认为这个错误是因为 material-ui 0.2x
和 React 16.x
之间的不兼容。
对于服务器端渲染,我发现 this repo 在服务器端用 React 16.x
渲染 material-ui 0.x
。所以肯定不是兼容性问题。
我最近的任务是同时支持 MUI 0.x 和 MUI 1.x,虽然这很有挑战性,但我找到了让它发挥作用的方法。
使用 MUI 0.x,我发现可以很好地协同工作的版本是:
material-ui@0.19.4
react@16.3.2
- 升级到 react@16.4
会破坏它,这与该次要更新中事件的处理方式有关。
要使 MUI 1.x 与 MUI 0.x 协同工作还需要一些其他配置,但希望这部分足以回答您的问题。
尝试从 React 15.4 升级到 React 16.4.1(也将 react-dom 升级到 16.4.1)后,我从路由器收到此错误消息:
TypeError: _nextProps.children is not a function
at ReactDOMServerRenderer.render (/var/www/web/node_modules/react-dom/cjs/react-dom-server.node.development.js:2491:55)
at ReactDOMServerRenderer.read (/var/www/web/node_modules/react-dom/cjs/react-dom-server.node.development.js:2354:19)
at renderToString (/var/www/web/node_modules/react-dom/cjs/react-dom-server.node.development.js:2726:25)
at render (/var/www/web/server/routes/others.jsx:141:24)
at process._tickCallback (internal/process/next_tick.js:68:7)
代码:
const render = () => {
const body = renderToString(
<MuiThemeProvider muiTheme={muiTheme}>
<ThemeProvider theme={theme}>
<Provider store={store}>
<IntlProvider>
<RouterContext {...renderProps} />
</IntlProvider>
</Provider>
</ThemeProvider>
</MuiThemeProvider>
);
render
在此处定义,但随后在同一路由文件中返回:
Promise.all(prefetchData(renderProps, store))
.then(render)
.catch(prefetchError => next(prefetchError));
我遵循 recommended instructions 以便从 React 15.x 升级到 React 16.x
因为我发现了有关 material-ui 与 React 16 兼容性的相关问题:
https://github.com/mui-org/material-ui/issues/8434
https://github.com/mui-org/material-ui/issues/7795
我想知道这个错误消息是否可能是由于 material-ui 0.2x 和 React 16.x 之间的不兼容引起的,或者换句话说,我想知道如果有必要升级到 material-ui 1.x 以便能够使用 React 16.x
我们使用 material-ui 0.18.1
和 React 16.3
进行客户端渲染,一切正常。我不认为这个错误是因为 material-ui 0.2x
和 React 16.x
之间的不兼容。
对于服务器端渲染,我发现 this repo 在服务器端用 React 16.x
渲染 material-ui 0.x
。所以肯定不是兼容性问题。
我最近的任务是同时支持 MUI 0.x 和 MUI 1.x,虽然这很有挑战性,但我找到了让它发挥作用的方法。
使用 MUI 0.x,我发现可以很好地协同工作的版本是:
material-ui@0.19.4
react@16.3.2
- 升级到react@16.4
会破坏它,这与该次要更新中事件的处理方式有关。
要使 MUI 1.x 与 MUI 0.x 协同工作还需要一些其他配置,但希望这部分足以回答您的问题。