【问题标题】:React-router producing setState warning反应路由器产生 setState 警告
【发布时间】:2017-01-16 17:00:22
【问题描述】:

我正在使用 React、Redux 和 React-Router。在 React 组件的 MapDispatchToProps() 中,我检查一个条件,如果该条件为真,我调用路由器的 browserHistory.push("/newLocation")。出于某种原因,我收到此错误:

警告:setState(...):在现有状态期间无法更新 过渡(例如在render 或其他组件的 构造函数)。渲染方法应该是 props 的纯函数和 状态;构造函数副作用是一种反模式,但可以移动 到componentWillMount

有趣的是,我的 React 组件是无状态的(纯 JS 函数),所以我知道我没有在渲染方法中显式设置状态。深入研究错误看起来像是试图设置状态的反应路由器:

尽管有此警告,但应用程序似乎运行正常。不知道如何摆脱这个警告。

【问题讨论】:

  • 你为什么在mapPropsToDispatch 中有这个逻辑?
  • 改用路由的onEnter 功能
  • mapDispatchToProps 应该是一个纯函数,这意味着它根本不应该改变函数之外的任何东西,它唯一的作用应该是返回值。你可以用副作用来改变某些东西,但如果这些影响渗透到 Redux 或 React,那么你会得到像这里发生的错误。一种无害的副作用是console.log。副作用会导致复杂的应用程序,这就是 Redux 积极反对它们的原因。
  • 我的 mapDispatchToProps 仍然是纯粹的——我不改变状态。重点是当我第一次进入该组件时是否存在特定条件,我只想“重定向”到另一个页面,否则继续正常处理。 Route 的 onEnter 属性非常适合我。

标签: reactjs redux react-router react-redux


【解决方案1】:

推送功能正在设置状态。您应该使用 react-router 中内置的 onEnter 功能在输入路由之前测试条件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 2020-11-06
    • 2021-01-21
    • 2022-08-03
    • 2016-02-19
    • 2018-03-20
    • 2021-01-22
    相关资源
    最近更新 更多