为一个reducer分派几个不同的动作时,只有最后一个动作会触发组件更新。 show然后解释可能会更好。
提供示例的一些注释:
App
组件反映了它的道具redirectPath
的更新历史记录。当它null
时,no redirect
字符串会添加到历史记录中。string
或null
。Do redirect
我希望这两项操作(SET_REDIRECT
和CLEAR_REDIRECT
)都将状态更改为AppContainer
组件。但只有最新的一个(CLEAR_REDIRECT
)触发了具有null
值的渲染方法。Do redirect with delay
按钮进行检查。我希望状态中的这两项更改(由SET_REDIRECT
和CLEAR_REDIRECT
操作提供)在调度操作时不会使用setTimeout
来触发组件更新。
我还尝试在获得CLEAR_REDIRECT
后从中间件调度SET_REDIRECT
,但结果相同。
我可以以某种方式达到预期的行为吗?
最初我将问题发布到redux repo,因为我认为它在redux中是一个问题,但@jimbolla解释说我主要是通过设计反应。
以下是对redux团队成员https://github.com/reactjs/redux/issues/2532的原始问题和评论的引用。
答案 0 :(得分:1)
不要依赖render()
中的状态更新。应该在render()
中执行的唯一代码是构造视图所需的代码。
您可以使用componentWillReceiveProps
来跟踪您的组件何时收到新属性。
您应该收听相应的属性并在收到时执行重定向。然后,您应该侦听指示重定向成功的属性,然后您可以调度操作以在需要时清除重定向状态,这将触发另一个组件更新。