当redux状态更新时,在组件上调用forceUpdate()

时间:2016-02-23 17:57:49

标签: javascript reactjs redux

我有一个问题,即redux状态正在成功更新,但反应组件没有重新渲染,经过一些研究我相信[forceUpdate()][1]可以解决我的问题,但我不确定正确的方法来实现它,即在redux之后状态更新。我尝试在github上查找示例,但没有运气。

4 个答案:

答案 0 :(得分:9)

正如其他人所说,forceUpdate()基本上是一种黑客行为。只要道具和状态发生变化,您就可以免费获得更新。 React和Redux无缝地协同工作,因此避免任何此类黑客攻击。

如果您的Redux状态正在正确更新且您的React视图不是,那么您很可能不会以不可变的方式进行更新。检查减压器。

答案 1 :(得分:4)

您的问题可能是您正在更新的状态不是顶级属性。 react调用“shallowEqual”方法来判断道具是否已更新。这意味着所有顶级属性,但如果您要更改更深层的属性并且所有顶级属性都相同,那么您将不会重新渲染。

我不确定redux是否会出现这种情况,也许它正在做更复杂的事情,但我知道这是反应中的工作流程。值得一看。

答案 2 :(得分:1)

这不是你想要的解决方案。

在不查看代码的情况下,无法确定实际出现的错误,但forceUpdate不是解决方案。如果新数据放置在州或道具中,则React将重新渲染。如果您不重新渲染,则意味着您的数据无法完全呈现。

答案 3 :(得分:1)

Redux已经使用connect装饰器进行了forceUpdate。也许你错过了组件中的这一点。官方文档的Usage with React部分对此行为进行了解释。