我开始学习React / Redux来构建应用程序。我想确定这种情况的最佳做法。我(目前)在Redux中有三个州:
现在,当用户更改过滤器对象时,它会调用更新#1的操作。但是,目标列表取决于用户在#1中指定的内容。我的第一个想法是让动作流入reducer - 然后在构建#1对象时,在reducer中调用另一个动作来构建#2,它会流经自己的reducer。
这本能地似乎......糟糕。我的第二个想法是将#1和#2组合成一个只包含两个状态的对象,在一个reducer中处理它并将它作为单个部分存储在Redux中。
在这种情况下,什么是最佳做法?
答案 0 :(得分:1)
我认为从reducer中调度一个动作会打破单向数据流原则,所以最好把它从表中删除。
你的第二种方法听起来像是一种良好的做法,但它也取决于状态#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
返回。
我建议'有效负载'和' meta'只是FSA compliant。
希望有所帮助!