忘了从那看到这种方式, 然后给TJ的Frontent-Boilerplate提了个PR, 就是关于这种方式
个人认为如果使用redux-actions
的话 创建Actions基本就几句话, 所以考虑整合Actions和Reducers到同一个文件. 这样的好处是: 便于管理action的名字. reducer和action都用同一个引用. 放在同一个文件同一个domain里很好控制, 以及一目了然
另一个好处是, 如果action名字越来越多到无法掌控, 如果某两个action不小心起了一个名字, 这样redux的dispatcher就会雪崩…
实际上我们根本不关心到底Action起了什么名字, 名字只是给dispatcher来分配到哪个Reducer用的! 所以用这种方式创建Actions和Reducers的话, 就很方便可以使用新的Symbol特性来解决这个问题拉~
例子:
//之前的
const ADD_TODO = 'add todo'
const DELETE_TODO = 'delete todo'
const EDIT_TODO = 'edit todo'
...
//使用 Symbol 之后, 只用给 Symbol(命名空间的名字) 就好了
const ADD_TODO = Symbol('todo')
const DELETE_TODO = Symbol('todo')
const EDIT_TODO = Symbol('todo')
...
这里每个Symbol(‘todo’)都是不互相等同的, 然后createAction和handleActions传入action name的时候 传同一个变量就行了, 比如createAction(ADD_TODO), handleActions({ [ADD_TODO] (state, action) {…}})