【前端状态管理】React 状态管理工具如何选 context/redux/mobx/zustand/jotai/recoil/valtio

什么是状态管理?

“状态”是描述应用程序当前行为的任何数据。这可能包括诸如“从服务器获取的对象列表”、“当前选择的项目”、“当前登录用户的名称”和“此模式是否打开?”等值。

众所周知,我们在研发一个复杂应用的过程中,一套好的状态管理方案是必不可少的,既能提升研发效率,又能降低研发维护成本,那么状态管理方案那么多,它们有什么不同,我们又该如何选择适合当前应用的方案呢?

本期将主要就 react 的常用状态管理方案进行对比分析,希望对各位看客有帮助。

React 状态管理方案

方案介绍
方案对比
框架 原理 优点 缺点
hooks context 基于 react hook,开发者可实现内/外部存储 1. 使用简单
2. 不需要引用第三方库,体积最小
3. 支持存储全局状态,但在复杂应用中不推荐
4. 不依赖 react 上下文,可在组件外调用(外部存储的条件下)
1. context value发生变化时,所有用到这个context的组件都会被重新渲染,基于 content 维护的模块越多,影响范围越大。
2.依赖 Context Provider 包裹你的应用程序,修改 store 无法在应用最顶层(App.tsx 层级)触发渲染
3. 受ui框架约束(react)
4. 依赖hooks调用
react-redux Flux思想,发布订阅模式,遵从函数式编程,外部存储 1. 不依赖 react 上下文,可在组件外调用
2. 支持存储全局状态
3. redux 本身是一种通用的状态解决方案
1. 心智模型需要一些时间来理解,特别是当你不熟悉函数式编程的时候
2. 依赖 Context Provider 包裹你的应用程序,修改 store 无法在应用最顶层(App.tsx 层级)触发渲染
3.受 ui 框架约束(react)
mobx 观察者模式 + 数据截止,外部存储 1. 使用简单,上手门槛低
2. 不依赖 react 上下文,可在组件外调用
3. 支持存储全局状态
4.通用的状态解决方案
1.可变状态模型,某些情况下可能影响调试
2. 除了体积相对较大之外,笔者目前未感觉到较为明显的缺点,3.99M
zustand Flux思想,观察者模式,外部存储 1. 轻量,使用简单,上手门槛低
2. 不依赖 react 上下文,可在组件外调用
3. 支持存储全局状态
4. 通用的状态解决方案
1.框架本身不支持 computed 属性,但可基于 middleware 机制通过少量代码间接实现 computed ,或基于第三方库 zustand-computed 实现
jotai 基于 react hook,内部存储 1. 使用简单
2. 组件颗粒度较细的情况下,jotai性能更好
3.支持存储全局状态
1. 依赖 react 上下文, 无法组件外调用,相对而言, zustand 在 react 环境外及全局可以更好地工作
2.受ui框架约束(react)
recoil 进阶版 jotai,基于 react hook + provider context,内部存储 相对于 jotai而言,会更重一些,但思想基本不变,拥有一些 jotai 未支持的特性及 api,如:
1.监听 store 变化
2. 针对 atom 的操作拥有更多的 api,编程上拥有更多的可能性,更加有趣
拥有 jotai 所有的缺点,且相对于 jotai 而言:
1.使用 recoil 需要 < RecoilRoot > 包裹应用程序
2. 编写 selector 会复杂一些
valtio 基于数据劫持,外部存储 1. 使用简单,类mobx(类vue)的编程体验
2.支持存储全局状态
3.不依赖 react 上下文,可在组件外调用
4. 通用的状态解决方案
1.可变状态模型,某些情况下可能影响调试
2.目前笔者没发现其它特别大的缺点,个人猜测之所以star相对zustand较少,是因为 valtio 的数据双向绑定思想与 react 存在冲突。

Source

import React from "react"
import ReactDOM from "react-dom"
import {
    makeAutoObservable } from "mobx"
import 
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值