Redux是一种状态管理工具,严格的单向数据流是redux架构的设计核心。Redux数据流的图示如下:以counter为例
Action
action就是一个普通的javascript对象,它用来描述发生了什么变化。按照约定,action 内必须使用一个字符串类型的 type 字段来表示将要执行的动作。多数情况下,type 会被定义成字符串常量。就像我们示例中的{type: 'INCREMENT'}和{type: 'DECREMENT'}。除了type字段外,我们可以根据我们的需要增加字段。
为了更好地移植,我们可以使用action生成函数,比如:
function add(number) {
const action = {
type: 'INCREMENT',
number
}
return action
}
然后我们可以直接在store里调用store.dispatch()来触发state改变。
Reducer
reducer规定了如何响应action,并把变化后的结果返回给store。reducer是一个纯函数,接收previousState(旧的state)和action,返回计算后得到的新state,在这个过程中不允许改变参数。例如:
function handle(state = initialState, action) {
switch(action.type) {
case 'INCREMENTNUMBERADD':
return Object.assign({}, state, {
number: action.number
})
break
default:
return state
}
}
当state里内容很多,且相互独立时,我们可以对reducer进行拆分,这样每个 reducer 只负责管理全局 state 中它负责的一部分。每个 reducer 的 state 参数都不同,分别对应它管理的那部分 state 数据。最后我们把这些reducer进行合成即可,redux中提供了一个工具类combineReducers()来做这个事情。
Store
store可以认为是一个容器,redux中store是单一的,它的主要职责有:
- 存储state
- 通过getState()方法获取state
- 通过subscribe()注册监听器
我们可以通过createStore()这个函数来生成store。