# 概念
Redux 是一个小型的独立 JS 库。Redux是一个使用叫做‘action’的事件来管理和更新应用状态的模式和工具库,它以集中存储(centralized store)的方式对整个应用中使用的状态进行集中管理,其规则确保状态只能以可预测的方式更新。 -----管理全局状态
# 什么时候使用
- 在应用的大量地方,都存在大量的状态
- 应用状态会随着时间的推移而频繁更新
- 更新该状态的逻辑可能很复杂
- 中型和大型代码量的应用,很多人协同开发
# 单向数据流(one-way data flow)
state--->view---->actions---->state
用state来描述应用程序在特定时间点的状况
基于state渲染出view
当触发一些事件(如点击按钮),state会根据发生的事情来更新state
新的state重新渲染出view
# 基本思想
应用中使用集中式的全局状态来管理,并明确更新状态的模式,以便让代码具有可预测性。
# 一些术语
# Action
一个有type字段的对象
const addAction = {
type:'add/todo',
payload:'do something'
}
1
2
3
4
2
3
4
type: 域/事件名称
- 域:action所属的特征或类型
- 事件名称:发生的具体事情
而action对象可以有其他字段,通常把附加信息放在payload字段里
# Action Creator
是一个创建并返回action对象的函数,作用:不用每次都动手写action对象
const func = (text)=>{
return {
type:'add/todo',
payload:text
}
}
1
2
3
4
5
6
2
3
4
5
6
# Reducer
一个函数,接收当前的state和一个action对象,决定如何更新状态,并返回新状态。
(state, action)=> newState
1
规则:
- 仅使用 state 和 action 参数计算新的状态值
- 禁止直接修改 state。必须通过复制现有的 state 并对复制的值进行更改的方式来做 不可变更新(immutable updates)。--->深拷贝
- 禁止任何异步逻辑、依赖随机值或导致其他“副作用”的代码
reducer 函数内部的逻辑通常遵循以下步骤:
检查 reducer 是否关心这个 action 如果是,则复制 state,使用新值更新 state 副本,然后返回新 state 否则,返回原来的 state 不变
看到这里感觉和react里的useReducer一样。