【问题标题】:React Router (v4) works for page reloads, but does not trigger UI event via <Link/>sReact Router (v4) 适用于页面重新加载,但不会通过 <Link/>s 触发 UI 事件
【发布时间】:2017-11-15 18:42:20
【问题描述】:

React Router 在我的 Webpack 开发服务器和热重载器的开发过程中一直运行良好,但是在为生产配置时它似乎失败了。它在页面刷新时起作用,但&lt;Link/&gt; 组件和推送到历史 API 不会导致 UI 发生变化。我的设置如下。其中render 是在本地与Webpack 开发服务器一起工作的设置,而renderTest 是不起作用的。

const render = Component => {
  ReactDOM.render(
    <MuiThemeProvider muiTheme={Theme}>
      <Router>
        <AppContainer>
            <Provider store={store}>
                <Component/>
            </Provider>
        </AppContainer>
      </Router>
    </MuiThemeProvider>,
    document.getElementById('root')
  )
};

const renderTest = Component => {
  ReactDOM.render(
    <MuiThemeProvider muiTheme={Theme}>
      <Router>
        <Provider store={store}>
            <Component/>
        </Provider>
      </Router>
    </MuiThemeProvider>,
    document.getElementById('root')
  )
};

//render(Root);
renderTest(Root);

// if (module.hot) {
//   module.hot.accept('./containers/root-container/root-container', () => { render(Root) });
// }

【问题讨论】:

  • “似乎失败”信息不充分,您能否提供您遇到的确切错误?
  • 当然,单击 不会导致 UI 发生变化。但是手动去一个路由(例如htttp://localhost:8080/some/route)是可行的。
  • 好的,我想通了。事实证明,react router (v4) 和 redux 存在已知的兼容性问题。 (更多信息在这里:github.com/ReactTraining/react-router/issues/4671)我发现适合我的情况的解决方法是用withRouter 包装我的根组件,这样位置上下文就会传递给每个组件。这不是一个理想的解决方案,但在官方修复之前它可以工作。
  • 您可以在下方发布您的解决方案作为答案并将其标记为答案,以便其他人可以更清楚地看到您的解决方案
  • 谢谢,我不只是潜伏堆栈溢出。

标签: javascript reactjs webpack react-router react-redux


【解决方案1】:

好的,我想通了。事实证明,react router (v4) 和 redux 存在一个已知的兼容性问题。 (有关此的更多信息:github.com/ReactTraining/react-router/issues/4671)我发现适用于我的情况的解决方法是用 withRouter 包装我的根组件,这样位置上下文就会传递给每个组件.这不是一个理想的解决方案,但在正式修复之前它可以工作。

export default withRouter(connect(mapStateToProps)(Root));

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 2021-01-04
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2020-09-29
    • 2020-04-29
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多