为单个reducer按顺序调度多个操作不会反映连接组件

时间:2017-07-28 05:58:45

标签: redux react-redux

为一个reducer分派几个不同的动作时,只有最后一个动作会触发组件更新。 show然后解释可能会更好。

提供示例的一些注释:

  1. App组件反映了它的道具redirectPath的更新历史记录。当它null时,no redirect字符串会添加到历史记录中。
  2. 根据操作,有一个简化器只返回普通stringnull
  3. 按下按钮Do redirect我希望这两项操作(SET_REDIRECTCLEAR_REDIRECT)都将状态更改为AppContainer组件。但只有最新的一个(CLEAR_REDIRECT)触发了具有null值的渲染方法。
  4. 如果我们在调度这些操作之间添加一点延迟,那么它们都会触发组件的渲染。您可以按Do redirect with delay按钮进行检查。
  5. 我希望状态中的这两项更改(由SET_REDIRECTCLEAR_REDIRECT操作提供)在调度操作时不会使用setTimeout来触发组件更新。

    我还尝试在获得CLEAR_REDIRECT后从中间件调度SET_REDIRECT,但结果相同。

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

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

    以下是对redux团队成员https://github.com/reactjs/redux/issues/2532的原始问题和评论的引用。

1 个答案:

答案 0 :(得分:1)

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

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

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