## reducer
**Reducers** 指定了應用狀態的變化如何響應 actions 并發送到 store 的,記住 **actions** 只是描述了有事情發生了這一事實,并沒有描述應用如何更新 `state`。
注意:`reducer`是一個純函數,接受`action`和舊的`state`,生成新的`state`。
`src/redux/reducers/counter.js`
~~~
/* 引用actions里定義的action常量 */
import { INCREMENT, DECREMENT, RESET } from 'actions/counter'
/* 初始化state */
const initState = { count: 0 }
/*
*reducer
*reducer就是純函數,接收state 和 action,然后返回一個新的 state
*/
export default function reducer(state = initState, action) {
switch (action.type) {
case INCREMENT: return { count: state.count + 1 }
case DECREMENT: return { count: state.count - 1 }
case RESET: return { count: 0 }
default : return state
}
}
~~~
一個項目可以有很多個rducer,我們把它們統一管理。
`src/redux/reducers.js`
~~~
import counter from './reducers/counter'
// reducer就是純函數,接收state 和 action,然后返回一個新的 state
export default function combineReducers(state = {}, action) {
return {
counter: counter(state.counter, action)
}
}
~~~
### `reducer`就是純函數,接收`state` 和 `action`,然后返回一個新的 `state`。
看看上面的代碼,無論是`combineReducers`函數也好,還是`reducer`函數也好(函數名可以不寫),都是接收`state`和`action`,都是返回更新后的`state`。區別就是`combineReducers`函數是處理整棵樹,`reducer`函數是處理樹的某一點。
下一節,我們要創建一個`store`,`store`需要一個單一的`reducers`,`reducers`包含散落在整個應用中所有的`reducer`。