<小时/> 的更新
此处提供的Redux示例可能对其他人有益: https://github.com/reactjs/redux/tree/master/examples/tree-view
<小时/> 的更新
感谢您的评论。我仍在调查此事,但我目前正在探索类似于@Chase DeAnda建议的方法。但是,我使用的对象的密钥等于父组件,而值等于以前是子组件的reducers的对象,而不是数组。这种方法似乎有效,但它仍然是WIP。缺点是父组件的深度嵌套减速器。
这是Redux文档中讨论的模式: https://redux.js.org/recipes/structuring-reducers/normalizing-state-shape
上面的链接还讨论了在其他更好的设计模式中解决嵌套问题的方法。我正在使用此文档来获得我想要的结果。
一旦我走得更远,我会用我的结果更新这个问题&amp;也许我们从那里继续。希望结果对类似情况下的其他用户有用。再次感谢!
原始问题
我无法为以下使用获取请求创建竞争条件的场景找到设计建议:
有没有人遇到类似的情况?我已经阅读并尝试了Dan的回复代码:
https://stackoverflow.com/a/33044701/4240734
和
How to avoid race conditions when fetching data with Redux?
但上述情景似乎有所不同。首先,我想根据非路由事件更改活动切片减少器。在这种情况下,我无法访问商店而不违反设计原则。此外,即使我有权访问商店,我也不知道replaceReducer正在提供我想要的行为。
我还在这里回顾了Dan Abramov的Egghead教程:
https://egghead.io/lessons/javascript-redux-avoiding-race-conditions-with-thunks
事实上,我已经实施了他的解决方案,以避免儿童组件中的竞争条件。在父组件之间切换时会出现额外的复杂程度。
我愿意接受任何建议。也许我的设计模式是关闭的,所以不要介意为架构提供更好的解决方案。
TLDR;
否则,我最终会遇到来自儿童减速器的竞争条件,这些减速器填充了错误父组件的数据。
答案 0 :(得分:0)
如果一次只有一个活动的父组件,您只需将父组件的某种ID附加到每个单独的提取操作。
因此,如果调度过时父组件的成功操作,例如:
{ type: 'CHILD_FETCH_SOMETHING_SUCCESS', payload: { parentID: 'someParent123', data: { ... }} }
..你会检查此时someParent123
仍然是一个活跃的父组件。如果没有,数据可以被丢弃,状态不会改变。