【问题标题】:React props updating but componentDidUpdate not firing反应道具更新但componentDidUpdate没有触发
【发布时间】:2019-12-08 16:39:36
【问题描述】:

我有这样一种情况,其中带有 mapStateToProps 的容器中的道具正在更新,组件中的道具正在更新(只是一个字符串),组件正在重新渲染......并且 componentDidUpdate 只是没有关闭。

这是我的连接方法:

export default connect(
    state => {
        console.log("token",state.Auth.idToken);
        return {
            token: state.Auth.idToken,
            isLoggedIn: state.Auth.idToken !== null ? true : false
        }
    },
    {login}
)(SignIn);

正如您在此处看到的,我将tokenmapStateToProps 一起使用,然后出于调试目的在渲染函数中显示此令牌。

<div className="isoLoginContent">
   {this.props.token}
</div>

所以这个token一开始是空的,然后当我使用redux-saga和reducer更新它时,token在render函数中正确显示,所以组件正在重新渲染。但是 componentDidUpdate 没有触发。我没有自定义 shouldComponentUpdate,也没有使用 PureComponent。还有什么可能导致这种情况?

【问题讨论】:

  • 我过去曾见过一些问题,即组件实际上是被重新安装而不是更新。您可以在 CDM 中启动 console.log 并查看这里是否发生这种情况吗?
  • 是的,我放了 console.log 并且组件实际上正在重新安装,但我不知道为什么会发生这种情况
  • 如果它被重新安装,它可能与父母有关。也可以加父组件代码吗?
  • 我明白了,我调试并发现 history.push 试图推送到一个新的 url 但它正在重定向回登录页面,因为尚未设置令牌。我相应地调整了逻辑,现在它可以工作了。非常感谢。我想我应该删除这个问题?
  • 不,您可以将您的评论发布为答案并将其标记为已回答。

标签: javascript reactjs redux


【解决方案1】:

感谢@benirving92 的建议,即组件实际上是重新安装而不是更新,我调试并发现 history.push 试图推送到一个新的 url 但它正在重定向回登录页面,因为尚未设置令牌。我相应地调整了逻辑,现在它可以工作了。感谢您的帮助。

【讨论】:

  • 我不能 2 天
猜你喜欢
  • 1970-01-01
  • 2019-09-22
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多