react-router@3
react-intl@2.4.0
<Provider store={store}>
<IntlProvider key={lang} locale={lang} messages={i18nConfig[lang].messages}>
<Suspense fallback={<div>Loading...</div>}>
<InjectIntlContext>
<Router history={browserHistory}>
<Route path="/login" component={LoginPage} />
<Route path="/" component={Layout}>
<Route path="/dashboard" components={{ main: DashboardPage }} />
<Route path="*" components={{ main: NoMatch }}></Route>
</Route>
</Router>
</InjectIntlContext>
</Suspense>
</IntlProvider>
</Provider>
lang
是保存在redux store里面的,用戶可以通過頁面操作去變更lang
茂缚,然而變更的時候瀏覽器會報錯如下:
You cannot change <Router routes>; it will be ignored
報錯原因:IntlProvider包在router的外面融蹂,
lang
的變更會引發(fā)內(nèi)部render,但是路由列表實際沒有變化,于是響應路由器報錯了向抢。解決辦法:在
<IntlProvider>
上設置key值,來強制創(chuàng)建新實例并重新呈現(xiàn)它下面的所有內(nèi)容胚委,也就不存在路由變更的問題了挟鸠。