Reactjs 如何在Redux应用程序中动态/任意创建其他还原程序或避免获取竞争条件
Reactjs 如何在Redux应用程序中动态/任意创建其他还原程序或避免获取竞争条件,reactjs,redux,react-redux,fetch-api,reducers,Reactjs,Redux,React Redux,Fetch Api,Reducers,更新 这里提供的Redux示例可能对其他人有指导意义: 更新 谢谢你的评论。我仍在对此进行调查,但我目前正在探索一种类似于@Chase DeAnda建议的方法。但是,我使用的不是数组,而是一个对象,其键等于父组件,值等于子组件的还原器。这种方法看似可行,但仍然是在制品。缺点是父组件的深度嵌套缩减器 这是Redux文档中讨论的模式: 上面的链接还讨论了在其他更好的设计模式中解决嵌套问题的方法。我使用此文档来获得我想要的结果 一旦我更进一步,我会用我的结果更新这个问题&也许我们会继续。希望结果
更新 这里提供的Redux示例可能对其他人有指导意义:
更新 谢谢你的评论。我仍在对此进行调查,但我目前正在探索一种类似于@Chase DeAnda建议的方法。但是,我使用的不是数组,而是一个对象,其键等于父组件,值等于子组件的还原器。这种方法看似可行,但仍然是在制品。缺点是父组件的深度嵌套缩减器 这是Redux文档中讨论的模式: 上面的链接还讨论了在其他更好的设计模式中解决嵌套问题的方法。我使用此文档来获得我想要的结果 一旦我更进一步,我会用我的结果更新这个问题&也许我们会继续。希望结果对其他类似情况的用户有用。再次感谢
原始问题 我找不到以下场景的设计建议,该场景正在使用获取请求创建竞争条件:
否则,我最终会得到来自子约简器的竞争条件,其中填充了错误父组件的数据。如果一次只有一个活动父组件,您可以简单地将父组件的某种ID附加到每个单独的获取操作 因此,如果已调度过时父组件的成功操作,例如:
{ type: 'CHILD_FETCH_SOMETHING_SUCCESS', payload: { parentID: 'someParent123', data: { ... }} }
..您将检查此时someParent123是否仍然是活动的父组件。如果没有,数据可以被丢弃,状态也不会改变。为什么不使用一个可以包含每个子实例数组的缩减器,而不是同一个缩减器的多个副本呢。。我觉得这是正确的方向。但让我再考虑一下。您的用例中是否有什么东西使redux成为比使用组件状态更好的选择?如果组件状态有效,并且每个组件都可以处理存储数据以及与获取其数据相关联的状态,可能会使生活更简单。是否确实需要动态创建新的还原器?您提到的这些子组件和父组件必须有共同之处。这意味着它们的行为只能在一个减速器中建模。如果新请求是由用户交互动态生成的,那么听起来您不应该在请求生命周期中使用redux状态。我将使用@TLadd指出的组件状态,只存储真正需要在redux中持久化的内容。谢谢您的评论。我仍在对此进行调查,但我目前正在探索一种类似于@Chase DeAnda建议的方法。但是,我使用的不是数组,而是一个对象,其键等于父组件,值等于子组件的还原器。这种方法看似可行,但仍然是在制品。缺点是父组件的深度嵌套缩减器。但我将探讨缓解这一问题的方法。一旦我更进一步,我会用我的结果更新这个问题&也许我们会继续。再次感谢!谢谢你的建议。我实际上正在实施这个解决方案的一部分。但是,发出这些请求,然后转储除当前活动的父级之外的所有请求是非常昂贵的。相反,我将它们作为key=parent/value=child对存储在状态树中。这样,用户可以启动几个不同的父组件,并在成功后将结果保存在状态中。