redux 是JavaScript 状态容器,提供可预测化的状态管理。可以构建一致化的应用,运用于不同的环境(客户端、服务端、原生应用),并且易于测试。
redux 三个基本原则:单一数据、State 是只读、使用纯函数来执行修改(Reducer)。
Action
Action 是把数据从应用传到store 的有效载荷。它是store 数据的唯一来源,一般通过store.dispatch() 将action 传到store。
Reducer
Reducer 指定了应用状态的变化如何响应actions 并发送store的。ps. actions 只是描述了事情发生了这一事实,并没有描述如何更新state。
Action 处理
reducer 是一个纯函数,接收旧的state 和action,返回新的state-- (previousState, action)=>newState。保持reducer 纯净度非常重要,不能做修改传入参数、执行有副作用的操作,如API 请求和路由跳转、调用非纯函数Date.now() 等。
拆分数据处理逻辑combineReducers(),将多个reducer 合并成一个。
Store
store 是它们联系到一起的对象。Store 一下职责:
- 维持应用的state;
- 提供getState() 方法获取state;
- 提供dispatch(action) 方法更新state;
- 通过subscribe(listener) 注册监听器;
- 通过subscribe(listener) 返回的函数注销监听其。
let store = createStore(xxx),创建一个store。
数据流
严格的单向数据流是Redux 架构的设计核心。