redux

redux

npm i redux

介绍

readux 是一个专门用于做状态管理的独立 js 库

vue、angular、react 啥子框架都可以用。就是共享数据的。

集中式管理 react 应用中多个组件共享的状态

能不用就不用。如果不用比较吃力(组件结构太复杂)才考虑使用。


redux 三个核心概念

action

  1. 动作的对象
  2. 包含 2 个属性
    • type:标识属性, 值为字符串, 唯一, 必要属性
    • data:数据属性, 值类型任意, 可选属性
  3. 例子:{ type: ‘ADD_STUDENT’,data: {name: ‘tom’,age:18} }

reducers

  1. 用于初始化状态、加工状态。
  2. 加工时,根据旧的 state 和 action, 产生新的 state 的**纯函数**

store

  1. 将 state、action、reducer 联系在一起的对象
  2. 如何得到此对象?
1
2
3
import { createStore } from "redux";
import reducer from "./reducers";
const store = createStore(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
2
3
4
5
6
//引入createStore 专门用于创建redux中核心的store对象
import { createStore } from "redux";
//引入为 Count组件服务的 reducer
import countReducer from "./count_reducer";
//导出 就是一个 状态共享以及管理核心对象了。
export default createStore(countReducer);

-count_reducer.js

该文件就是创建出来 为 count 组件服务的。reducer 本质就是一个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 初始化值为 0 初始值写在最上面 可读性强 */
const initState = 0
/* 两个参数一个是初始值(核心数据)、一个是action */
export default function countReducer(preState=initState,action){
const {type,data} = action
//根据type决定如何加工数据
switch(type){
case 'increment': //如果是加
return preState + data
case 'decrement': //如果是减
return preState - data
default:
return preState
}

–组件中

  • 引入 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).具体编码:
    1. 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 协议 ,转载请注明出处!