我可以将完整状态传递给减速器吗?

时间:2017-04-25 09:37:48

标签: redux react-redux

如果我设计我的减速器而不是只读取部分状态,是否可以访问完整的状态树,是否有任何不便之处?

所以不要写这个:

function reducer(state = {}, action) {
  return {
    a: doSomethingWithA(state.a, action),
    b: processB(state.b, action),
    c: c(state.c, action)
  }
}

我分别在doSomethingWithAcprocessB缩减器内构建状态:

function reducer(state = {}, action) {
  return {
    a: doSomethingWithA(state, action), // calc next state based on a
    b: processB(state, action), // calc next state based on b
    c: c(state, action) // calc next state based on a, b and c
  }
}

我会使用更多内存吗?有什么表现不方便吗?我理解在javascript中,引用总是作为参数传递,这就是为什么我们应该返回一个新对象,如果我们想要更新状态或使用Immutable.JS来强制实现不变性,那么......再次,它会不会有任何不便之处一点都没有?

1 个答案:

答案 0 :(得分:0)

不,这没什么不对。将更新逻辑编写为单独函数而不是单独的Flux“存储”的部分原因是它使您可以显式控制依赖关系链。如果更新state.b的逻辑取决于首先更新state.a,则可以执行此操作。

您可能需要仔细阅读Redux文档中的Structuring Reducers部分,尤其是Beyond combineReducers主题。除了典型的combineReducers方法之外,它还讨论了其他各种减速器结构。我还在我的博文Practical Redux, Part 7: Form Change Handling, Data Editing, and Feature Reducers中提供了一些这种结构的例子。