React / Redux - 链接操作或组合reducer

时间:2016-03-21 01:11:34

标签: javascript reactjs redux

我开始学习React / Redux来构建应用程序。我想确定这种情况的最佳做法。我(目前)在Redux中有三个州:

  1. 用户指定的过滤器对象列表
  2. 状态#1传递给API调用,该API调用处理它并返回目标列表
  3. 由#1和#2过滤掉的第三个建筑物列表,并显示给用户。
  4. 现在,当用户更改过滤器对象时,它会调用更新#1的操作。但是,目标列表取决于用户在#1中指定的内容。我的第一个想法是让动作流入reducer - 然后在构建#1对象时,在reducer中调用另一个动作来构建#2,它会流经自己的reducer。

    这本能地似乎......糟糕。我的第二个想法是将#1和#2组合成一个只包含两个状态的对象,在一个reducer中处理它并将它作为单个部分存储在Redux中。

    在这种情况下,什么是最佳做法?

1 个答案:

答案 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

希望有所帮助!