【问题标题】:Provider component doesn't re-render提供者组件不会重新渲染
【发布时间】:2015-12-16 22:28:09
【问题描述】:

我实际上不确定这是否是预期的行为,我只是错过了一些东西 :)

容器文件:

https://gist.github.com/anonymous/2b93241de5573bd0a6bd

这个游戏组件的使用如下:

https://gist.github.com/anonymous/80f0c2747c25a541e68d 发送 pickColor 操作后,存储更新(我通过从其他地方订阅它来检查)。因此,在调度此操作后 - 游戏组件不会重新渲染。

正如我所说,我不确定是我没有正确设置 redux 还是它只是以这种方式设计的,所以我必须通过订阅 store 手动重新渲染组件?

【问题讨论】:

  • 如果您的商店正在更新,但您的组件没有更新,那么您很可能正在改变您的状态。你的减速机是什么样子的?
  • 这是个问题。愚蠢的我。谢谢
  • 为完整起见添加了详细答案。

标签: javascript reactjs redux


【解决方案1】:

react-redux 绑定只会在状态对象是新对象实例时更新您的组件。

因此,您的减速器必须返回全新的对象。这就是不变性的全部意义所在。

不好:

switch (action.type) {
    case SET_VALUE:
        state.value = action.value;
        return state;
}

好:

switch (action.type) {
    case SET_VALUE:
        return Object.assign({}, state, {
            value: action.value
        });
}

【讨论】:

  • 哦,伙计,我已经搜索了大约 2 个小时,为什么我的组件的状态没有被上传,检查反应开发工具并看到新项目出现,只检查我的减速器功能意识到我返回了完全相同的状态,但只更改了该状态的单个键。 Object.assign() 获胜!谢谢沃尔什先生……另外,我喜欢你的博客,以及关于感觉像个骗子的文章。来自西雅图的欢呼! :)
  • 这确实是一个很棒的博客,只是我不能称赞。 (不同的人,同名。)但除此之外,很高兴能提供帮助。
猜你喜欢
  • 2020-02-13
  • 2020-04-18
  • 2018-09-01
  • 2019-10-05
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多