[ 前端与 HTML|青训营笔记]

110 阅读3分钟

第 11 节 React 状态管理

一、什么是状态管理

状态管理工具的本质:管理共享内存中的状态。

  1. 共享内存
  2. 管理状态
  3. 页面通信
  4. 组件通信
  5. 刷新失效

为什么React有这么多少状态管理工具?

  • Vue: Vuex(Pinia)
  • Angular: Service和Rxjs
  • React: Flux、Redux、Mobx、Rxjs、Recoil、Jotai、Zustand

二、状态管理管理工具简介

(一)React状态管理工具可以分为以下几类:

  • React自带:Local State(props)和Context
  • 单向数据流:Flux、Redux(Redux-toolkit)
  • 双向数据绑定:Mobx
  • 原子型状态管理:Recoil、Jotai
  • 异步操作密集型:Rxjs

(二) React状态管理简介

image.png

  1. Local State(props) local State顾名思义,就是组件级别的局部状态。
  2. Context:OtherDisplay没有用到Context里的value,但是Context的值变换, otherDisplay也会重新渲染。
  3. Redux:Redux是从Flux演变而来的, Flux它是 Facebook官方给出的应用架构,利用数据的单向流动的形式对公共状态进行管理,现在已经被淘汰了,其设计思想还是可以参考和借鉴的

Flux利用数据的单向流动的形式对公共状态进行管理

  • View:视图层
  • Action:视图发出的消息
  • Dispatcher:派发者,用来接收Action,执行回调函数
  • Store:数据层,存放状态,一旦发生改动,就会更新数据以及emit相关事件等

Flux的缺点

  • UI组件和容器组件的拆分过于复杂
  • Action和Dispatcher绑定在一起
  • 不支持多个store
  • store被频繁的引入和调用

Redux 的架构图

image (1).png

Flux 的架构图

image (2).png

Redux的三大原则:单一数据源,只有一个store、store中的state是只读的、使用纯函数来执行修改。

  1. Mobx
    步骤:
  • 页面事件(生命周期、点击事件等等)触发action的执行。
  • 通过action来修改状态。
  • 状态更新后,computed计算属性也会根据依赖的状态重新计算属性值。
  • 状态更新后会触发reaction,从而响应这次状态变化来进行一些操作(渲染组件、打印日志等等)
  1. Recoil
    Recoil是React官方内置的状态管理工具,一定程度上解决了Local State和Context的局限性,且能够兼容React的新特性比如Concurrent模式等。

  2. Zustand
    Zustand是主打轻量级的状态管理工具,没有Redux那样臃肿的设计,也没有兼容React类组件的历史包袱, Zustand状态管理工具体积很小,因此很适合移动端的网页。

三、Redux在项目中的实践

  1. redux做为一款状态管理工具,主要是为了解决组件问通信的问题。

  2. Redux复杂的模版代码:
    redux是遵循函数式编程的规则,action是一个原始js对象(plain object)且reducer是一个纯函数,对于同步且没有副作用的操作,数据流起到可以管理数据,从而控制视图层更新的目的。

  3. 在有副作用的action和原始的action之间增加中间件处理,中间件的作用就是:转换异步操作,生成原始的action,这样,reducer函数就能处理相应的action,从而改变state,更新UI。