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
    道具为什么很重要?