1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { combineReducers } from 'redux';
// import { routerReducer } from 'react-router-redux';
import user from './modules/user/user_reducer';
import menu from './modules/menu/menu_reducer';
import swift from './modules/swift/swift_reducer'
/**
* combineReducers(reducers)
*
* desc:
* combineReducers 辅助函数的作用是,把一个由多个不同 reducer 函数作为 value 的 object,合并成一个最终的 reducer 函数,然后就可以对这个 reducer 调用 createStore。
* 合并后的 reducer 可以调用各个子 reducer,并把它们的结果合并成一个 state 对象。state 对象的结构由传入的多个 reducer 的 key 决定。
*
* 最终,state 对象的结构会是这样的:
*
* {
* reducer1: ...
* reducer2: ...
* }
*
* 自定义 `State` 树名称:
* 通过为传入对象的 reducer 命名不同来控制 state key 的命名。例如,你可以调用 combineReducers({ todos: myTodosReducer, counter: myCounterReducer }) 将 state 结构变为 { todos, counter }。
* 通常的做法是命名 reducer,然后 state 再去分割那些信息,因此你可以使用 ES6 的简写方法:combineReducers({ counter, todos })。这与 combineReducers({ counter: counter, todos: todos }) 一样。
*
* 参数:
* reducers (Object): 一个对象,它的值(value) 对应不同的 reducer 函数,这些 reducer 函数后面会被合并成一个。下面会介绍传入 reducer 函数需要满足的规则。
*
* 返回值:
* (Function):一个调用 reducers 对象里所有 reducer 的 reducer,并且构造一个与 reducers 对象结构相同的 state 对象。
*
* 注意,每个传入 combineReducers 的 reducer 都需满足以下规则:
* 1、所有未匹配到的 action,必须把它接收到的第一个参数也就是那个 state 原封不动返回。(在 `switch` 最后 `return state`)
* 2、永远不能返回 undefined。当过早 return 时非常容易犯这个错误,为了避免错误扩散,遇到这种情况时 combineReducers 会抛异常。
* 3、如果传入的 state 就是 undefined,一定要返回对应 reducer 的初始 state。根据上一条规则,初始 state 禁止使用 undefined。
* 使用 ES6 的默认参数值语法来设置初始 state 很容易,但你也可以手动检查第一个参数是否为 undefined。(`state = initState`,当 `state` 为 `undefined` 时会赋默认值 `initState`)
*
*/
export default combineReducers({
user,
menu,
swift,
// routing: routerReducer
});