Redux 不是所有组件都看到相同的状态序列吗?
请参见示例代码: 状态很简单,只包含一个Redux 不是所有组件都看到相同的状态序列吗?,redux,react-redux,Redux,React Redux,请参见示例代码: 状态很简单,只包含一个值。Sub和App都连接到redux。单击分派按钮时,值递增。当值达到3时,App将清除组件中的状态 但是从控制台日志中,它显示为Sub从未看到3状态 VM220:80行动 VM220:21减速器 VM220:83调度:0.525146484375ms VM220:52应用程序道具1 VM220:58应用程序渲染1 VM220:32子项目1 VM220:35子渲染1 VM220:80行动 VM220:21减速器 VM220:83调度:0.4851074
值
。Sub
和App
都连接到redux。单击分派按钮时,值
递增。当值达到3
时,App
将清除组件中的状态
但是从控制台日志中,它显示为Sub
从未看到3
状态
VM220:80行动
VM220:21减速器
VM220:83调度:0.525146484375ms
VM220:52应用程序道具1
VM220:58应用程序渲染1
VM220:32子项目1
VM220:35子渲染1
VM220:80行动
VM220:21减速器
VM220:83调度:0.485107421875ms
VM220:52应用程序道具2
VM220:58应用程序渲染2
VM220:32子项目2
VM220:35子渲染2
VM220:80行动
VM220:21减速器
VM220:83调度:0.4931640625ms
VM220:52应用程序道具3以下是渲染应用程序时在幕后发生的事情:
从Redux获取应用程序
组件的道具
使用步骤1中的道具调用App::componentWillReceiveProps()
使用步骤1中的道具调用App::render()
App::render()
告诉React渲染子组件
从Redux获取子组件的道具
使用步骤5中的道具调用Sub::componentWillReceiveProps()
使用步骤5中的道具调用Sub::render()
当您在App::componetWillReceiveProps()
中调度clearAction()
事件时(在步骤2和步骤3之间),Redux会立即将存储中的value
属性从3
更改为0
,因此当您到达步骤5时,Redux存储包含value=0
,这就是为什么Sub
组件似乎从未看到值=3
通过调整代码并调用store.dispatch(clearAction())可以看到这一点代码>超时后:
if (nextProps.value == 3) {
setTimeout(function() {
store.dispatch(clearAction());
}, 1000); // dispatch the clearAction() after one second
}
通过该更改,您应该可以看到value=3
渲染一直到子组件,然后在发出clearAction()
事件时单击一秒钟后自动更改为value=0
。谢谢。只是添加了一些比较代码,没有使用react-redux。仍在试图理解它为什么会这样。我也没有看到任何描述这一点的文件。我是不是以不好的方式编写代码呢?考虑一下你的代码> App组件:如果在<代码> Read()/<代码>方法中,如果value属性是<代码> 1 ,你决定渲染<代码>子< /C>组件,但是如果值属性是<代码> 2 < /代码>,则呈现<代码>不同的子< /代码>组件,如果Sub
从未被渲染,那么React计算它的属性是没有意义的,并且在调用App::render()
之前,它不知道它是否将被渲染。这就是为什么每个组件的属性在呈现之前都不会计算出来的原因。编写代码的方式没有问题。如果Sub
组件要立即接收值=0
道具,那么它接收值=3
道具为什么很重要?