React/Redux - 链接操作或组合减速器
React/Redux - Chaining Actions or combining reducers
我开始学习 React/Redux 构建应用程序。我正在尝试确定针对这种情况的最佳做法。我(目前)在 Redux 中有三个状态:
- 用户指定的过滤对象列表
- 状态 #1 被传递给处理它的 API 调用和 returns 目的地列表
- 按 #1 和 #2 过滤并显示给用户的第三个建筑物列表。
所以现在,当用户更改过滤器对象时,它会调用更新 #1 的操作。但是,目的地列表取决于用户在#1 中指定的内容。我的第一个想法是让 action 流入一个 reducer - 然后当构建 #1 对象时,在 reducer 中调用另一个动作来构建 #2,它流经它自己的 reducer。
这本能地似乎……不好。我的第二个想法是将#1 和#2 组合成一个只包含这两种状态的对象,在单个 reducer 中处理它并将它作为一个整体存储在 Redux 中。
在这种情况下什么是最佳做法?
我认为从你的 reducer 中调度一个 action 会破坏单向数据流原则,所以最好把它从 table 中去掉。
您的第二种方法听起来不错,但它还取决于状态 #3 需要访问 #1 和 #2 的难易程度,如果您正在考虑可伸缩性,最好将所有三个都保持不变状态树中的级兄弟。
为此,创建一个动作,例如 RECEIVE_DATA
,它可能如下所示:
{
type: 'RECEIVE_DATA',
payload: { /* data from API */ },
meta: {
filter: [ /* filter tags */ ]
}
}
使用对 API 进行(异步)调用的动作创建器。成功时,调度 RECEIVE_DATA
并且你应该有两个 reducer 都在监听 RECEIVE_DATA
.
一个减速器关注状态#1,另一个减速器关注状态#2。他们只是订阅他们关心的状态树的一部分,你可以 return 一个 action.payload
和另一个 action.meta.filter
。
我建议 'payload' 和 'meta' 只是 FSA compliant。
希望对您有所帮助!
我开始学习 React/Redux 构建应用程序。我正在尝试确定针对这种情况的最佳做法。我(目前)在 Redux 中有三个状态:
- 用户指定的过滤对象列表
- 状态 #1 被传递给处理它的 API 调用和 returns 目的地列表
- 按 #1 和 #2 过滤并显示给用户的第三个建筑物列表。
所以现在,当用户更改过滤器对象时,它会调用更新 #1 的操作。但是,目的地列表取决于用户在#1 中指定的内容。我的第一个想法是让 action 流入一个 reducer - 然后当构建 #1 对象时,在 reducer 中调用另一个动作来构建 #2,它流经它自己的 reducer。
这本能地似乎……不好。我的第二个想法是将#1 和#2 组合成一个只包含这两种状态的对象,在单个 reducer 中处理它并将它作为一个整体存储在 Redux 中。
在这种情况下什么是最佳做法?
我认为从你的 reducer 中调度一个 action 会破坏单向数据流原则,所以最好把它从 table 中去掉。
您的第二种方法听起来不错,但它还取决于状态 #3 需要访问 #1 和 #2 的难易程度,如果您正在考虑可伸缩性,最好将所有三个都保持不变状态树中的级兄弟。
为此,创建一个动作,例如 RECEIVE_DATA
,它可能如下所示:
{
type: 'RECEIVE_DATA',
payload: { /* data from API */ },
meta: {
filter: [ /* filter tags */ ]
}
}
使用对 API 进行(异步)调用的动作创建器。成功时,调度 RECEIVE_DATA
并且你应该有两个 reducer 都在监听 RECEIVE_DATA
.
一个减速器关注状态#1,另一个减速器关注状态#2。他们只是订阅他们关心的状态树的一部分,你可以 return 一个 action.payload
和另一个 action.meta.filter
。
我建议 'payload' 和 'meta' 只是 FSA compliant。
希望对您有所帮助!