redux
redux
npm i redux
介绍
readux 是一个专门用于做状态管理的独立 js 库
vue、angular、react 啥子框架都可以用。就是共享数据的。
集中式管理 react 应用中多个组件共享的状态
能不用就不用。如果不用比较吃力(组件结构太复杂)才考虑使用。
redux 三个核心概念
action
- 动作的对象
- 包含 2 个属性
- type:标识属性, 值为字符串, 唯一, 必要属性
- data:数据属性, 值类型任意, 可选属性
- 例子:{ type: ‘ADD_STUDENT’,data: {name: ‘tom’,age:18} }
reducers
- 用于初始化状态、加工状态。
- 加工时,根据旧的 state 和 action, 产生新的 state 的
**纯函数**
。
store
- 将 state、action、reducer 联系在一起的对象
- 如何得到此对象?
1 |
|
- 此对象的功能?
- getState(): 得到 state
- dispatch(action): 分发 action, 触发 reducer 调用, 产生新的 state
- action 也直接写成一个对象。只要有 type 和 data 就可以了。
- subscribe(listener): 注册监听, 当产生了新的 state 时, 自动调用
实践
1. redux 并非和 vuex 那样是响应式状态管理
需要手动配置,就是检测 store 状态更新的时候,再次调用 render 函数
一般推荐就在 index.js 全局中配置
使用 store.subscribe 包裹 根组件的渲染即可
但默认的渲染还是要保留的嗷(就是两 render),不然页面不显示。
2. 最基本的 redux 使用流程
src 下建立:
-redux
-**store.js **
该文件就是为了创建和暴露 store 对象
1 |
|
-count_reducer.js
该文件就是创建出来 为 count 组件服务的。reducer 本质就是一个函数
1 |
|
–组件中
- 引入 redux 核心对象 store
- 任务派发给 reducers 加工
- 获取 redux 管理的状态
- getState(): 得到 state
- redux 的状态不能和组件中的 state 重名
3. action 使用详解
基本使用
action 的 type 多推荐使用常量
在 redux 中再定义一个 constant.js 文件 存放 type 名。
–定义导出
–action 配置 以及使用常量 type
需要注意的是 箭头函数的如果返回值是个对象,需要外层套个小括号
–组件中使用 action 派发任务
- 导入
- 使用
异步 action
- (1).明确:延迟的动作不想交给组件自身,想交给 action
- (2).何时需要异步 action:想要对状态进行操作,但是具体的数据靠异步任务返回。
- (3).具体编码:
npm i redux-thunk
,并配置在 store 中
- 2).创建异步 action 的函数不再返回一般对象,而是一个函数,该函数中写异步任务。
- 3).异步任务有结果后,分发一个同步的 action 去真正操作数据。
redux-DevTools
得先要安装一个库 npm i redux-devtools-extension
然后在 store 中配置
导出 store 对象的时候,createStore 的第二个参数就是 composeWithDevTools(支持异步 action 的 thunk 写到这里面)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!