我正在使用类似React的方法处理我的项目,我的问题是我的Reducer非常“平坦”,但他们需要在不同的状态树区域处理许多更新,因此它们变得越来越复杂
例如,在调度动作'DO_SOMETHING'之后,首先我需要在3 LOC内更新我的状态,但是当项目增长并且我需要处理其他功能时,有人想要查看基本结果+之后的额外内容执行相同的操作。所以你可以想象,在花了好几周后,减速器变得“胖”的方式是它们以同样的方式触及同一棵树的许多不同区域,但是在它们内部构造代码真的很难(一个状态)树和一家商店。)
在大多数教程中,我只能找到给定的场景:
虽然在我的情况下它就像:
case SELECT_FILTER:
return Object.assign({}, state, {
oneProperty: ...,
anotherProperty: null,
nextProperty: false
// and the logic is getting bigger and bigger
})
:/
我试图创建“减少器集” - 过滤器减少器,减少列表等等,但问题是我正在处理同一页面并且传入功能引入了交叉更改。在较小的应用程序中,简单的分组是可以的,但现在每个reducer似乎都对我所在州的太多部分感兴趣。
所以我的问题是如何正确构建我的减速器?也许我把太多的“本地国家”放入州树?或者是其他东西?我期待看到你的解决方案与组合和构造减速器有关。
答案 0 :(得分:3)
方便的是,去年我为Redux文档编写了一个名为"Structuring Reducers" :)的部分。它演示了几种用于组织和组合reducer逻辑的有用技术。特别是,您可能会对"Beyond combineReducers
"和"Reusing Reducer Logic"上的部分感兴趣。
我的"Practical Redux" tutorial series还演示了一些更高级的缩减器结构,尤其是帖子Practical Redux, Part 7: Form Change Handling, Data Editing, and Feature Reducers。
可能还值得考虑调度多个“原始”动作,这些动作可以按顺序分派以形成更大的行为。例如,您可能有一个thunk连续发送BASIC_UPDATE
,SPECIFIC_EXTRA_UPDATE_1
和SPECIFIC_EXTRA_UPDATE_2
。有关性能的问题需要注意,但它是一种有效的方法(并且可以通过各种批处理策略解决性能问题)。有关详细信息,请参阅dispatching multiple actions和reducing store notification events上的Redux常见问题解答条目,我的博文Idiomatic Redux: Thoughts on Thunks以及我的Redux插件目录中的Store#Store Change Subscriptions部分。