如果我设计我的减速器而不是只读取部分状态,是否可以访问完整的状态树,是否有任何不便之处?
所以不要写这个:
function reducer(state = {}, action) {
return {
a: doSomethingWithA(state.a, action),
b: processB(state.b, action),
c: c(state.c, action)
}
}
我分别在doSomethingWithA
,c
或processB
缩减器内构建状态:
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来强制实现不变性,那么......再次,它会不会有任何不便之处一点都没有?
答案 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中提供了一些这种结构的例子。