美文网首页
react-intl更新lang时引起路由变更报错

react-intl更新lang时引起路由变更报错

作者: muroujue | 来源:发表于2020-04-10 09:05 被阅读0次

    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,然而变更的时候浏览器会报错如下:

    image.png
    You cannot change <Router routes>; it will be ignored
    报错原因:IntlProvider包在router的外面,lang的变更会引发内部render,但是路由列表实际没有变化,于是响应路由器报错了。
    解决办法:在<IntlProvider>上设置key值,来强制创建新实例并重新呈现它下面的所有内容,也就不存在路由变更的问题了。

    相关文章

      网友评论

          本文标题:react-intl更新lang时引起路由变更报错

          本文链接:https://www.haomeiwen.com/subject/kjdlmhtx.html