2017-07-28 22 views
0

为一个缩减器分派几个不同的动作时,只有最后一个动作触发组件更新。这可能会更好地show然后解释。按顺序为单个缩减器分派多个动作并不反映连接组件的状态变化

上提供的示例中的一些注意事项:

  1. App部分反映更新的历史,它的道具redirectPath。当它作为null然后no redirect字符串添加到历史。
  2. 有一个reducer,根据操作返回一个普通的stringnull
  3. 通过按下按钮Do redirect我期望这两个操作(SET_REDIRECTCLEAR_REDIRECT)都将更改状态提供给AppContainer组件。但只有最新的一个(CLEAR_REDIRECT)才会触发呈现方法,其值为null
  4. 如果我们在派发这些动作之间增加了一些微小的延迟,那么它们都会触发组件的渲染。您可以按Do redirect with delay按钮进行检查。

我希望在状态方面的变化(由SET_REDIRECTCLEAR_REDIRECT行动提供)应触发组件更新无需调度操作时使用setTimeout

我也尝试从中间件移动CLEAR_REDIRECT的调度,得到SET_REDIRECT后,但结果相同。

我可以以某种方式达到预期的行为吗?

最初我将问题发布到redux回购,因为我认为这是一个问题,但@jimbolla解释说,它主要是通过设计反应。

以下是对redux团队成员https://github.com/reactjs/redux/issues/2532的原始问题和意见的参考。

回答

1

千万不要依赖在render()中执行状态更新。应该在render()中执行的唯一代码是构建视图所需的代码。

您可以使用componentWillReceiveProps来追踪组件何时收到新属性。

您应该听取相应的属性并在收到时执行重定向。然后,您应该监听指示重定向成功的属性,然后您可以调度操作以清除重定向状态(如果需要),这将触发另一个组件更新。

+0

'你可以使用componentWillReceiveProps' 这是一个非常正确的点。我也来过它。 – likerRr