React/Redux - 链接动作或组合化简器
React/Redux - Chaining Actions or combining reducers
我开始学习React/Redux来构建一个应用程序。我正在尝试确定这种情况的最佳实践是什么。我(目前)在 Redux 中有三个状态:
- 用户指定的筛选器对象列表
- 状态 #1 被传递给处理它的 API 调用并返回目标列表
- 按 #1 和 #2 过滤并显示给用户的第三个建筑物列表。
因此,现在当用户更改筛选器对象时,它会调用更新 #1 的操作。但是,目标列表取决于用户在 #1 中指定的内容。我的第一个想法是让动作流入化简器 - 然后当构建 #1 对象时,调用化简器内的另一个动作来构建 #2,它流经自己的化简器。
这本能地似乎...坏。我的第二个想法是将 #1 和 #2 组合成一个仅包含两种状态的对象,在单个化简器中处理它,并将其作为单个部分存储在 Redux 中。
在这种情况下,什么被认为是最佳实践?
我认为从您的化简器调度操作会破坏单向数据流原则,因此最好将其从桌面上删除。
您的第二种方法听起来像是很好的做法,但它也取决于状态 #3 需要访问 #1 和 #2 的难易程度,如果您正在考虑可伸缩性,最好将所有三者保留为状态树中的相同级别的同级。
为此,请创建一个操作,例如 RECEIVE_DATA
,它可能如下所示:
{
type: 'RECEIVE_DATA',
payload: { /* data from API */ },
meta: {
filter: [ /* filter tags */ ]
}
}
使用对 API 进行(异步)调用的操作创建器。成功后,调度RECEIVE_DATA
,您应该有两个化简器都在侦听RECEIVE_DATA
。
一个化简器关注状态 #1,另一个关注 #2。它们只需订阅它们所关注的状态树部分,您可以只从其中一个返回action.payload
,从另一个返回action.meta.filter
。
我建议"有效载荷"和"元"只是为了符合 FSA。
希望对您有所帮助!
相关文章:
- 根据id将json数组组合为一个json数组
- 接受不在列表中的值-引导组合框
- React Redux错误页面管理
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 在Redux中,我应该在哪里编写复杂的异步流
- 组合两个javascript函数
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- Telerik rad组合框多列数据绑定
- 组合 2 个 JavaScript .scroll 函数
- React redux初始化功能,无论状态变化如何
- 如何使用jquery组合两个数组
- onChange不足以从Dojo组合框触发查询
- 为什么react/redux前端项目在package.json中包含生产依赖项
- 设计redux状态树
- React+Redux性能优化与组件ShouldUpdate
- React/Redux - 链接动作或组合化简器
- 测试 Redux 组合化简器
- Redux;通过combineRoducer使用组合减速器时访问状态的其他部分
- 我应该基于调用来组织我的react redux reducer组合还是基于一个reducer管理的状态
- React-intl、Redux-Form组合并发出警告