我需要延迟root应用程序组件,直到我的redux使用redux-persist存储autoHydrates。但是使用此代码会导致使用热重新加载时的开发错误:
const App = () => (
<MuiThemeProvider>
<Provider store = {store}>
{getRoutes(checkAuth, history)}
</Provider>
</MuiThemeProvider>
)
class AppProvider extends Component {
constructor () {
super()
this.state = { rehydrated: false }
}
componentWillMount () {
persistStore(store, {storage: localforage}, () => {
this.setState({ rehydrated: true })
})
}
render () {
if (!this.state.rehydrated) {
return <div>Loading...</div>
}
return (
<App />
)
}
}
ReactDOM.render(
<AppProvider/>,
document.getElementById('app')
)
如果我将其更改为此,它可以正常工作(热重新加载时没有错误):
const App = () => (
<MuiThemeProvider>
<Provider store = {store}>
{getRoutes(checkAuth, history)}
</Provider>
</MuiThemeProvider>
)
ReactDOM.render(
<App/>,
document.getElementById('app')
)
我尝试使用process.env.NODE_ENV来检查它的'生产'或'开发',以便我可以有条件地运行上面的代码片段,但是,由于某种原因,如果我添加有状态组件片段它仍然会导致错误在条件只运行如果process.env.NODE_ENV ==='开发' 当我在HomeConatiner中呈现的组件中更改某些内容时出现以下错误:
warning.js:36警告:React.createElement: type不应为null,undefined,boolean或number。它应该是一个 string(用于DOM元素)或ReactClass(用于复合组件)。 检查
HomeContainer
的呈现方法。未捕获错误:元素类型无效:需要一个字符串(for 内置组件)或类/函数(用于复合组件) 但得到了:未定义。检查
的渲染方法HomeContainer
。(...)
答案 0 :(得分:0)
我认为您应该在persistStore
而不是componentDidMount
中调用componentWillMount
函数。