2023.8.14 星期一
什么是状态管理?
“状态”是描述应用程序当前行为的任何数据。这可能包括诸如“从服务器获取的对象列表”、“当前选择的项目”、“当前登录用户的名称”和“此模式是否打开?”等值。
众所周知,我们在研发一个复杂应用的过程中,一套好的状态管理方案是必不可少的,既能提升研发效率,又能降低研发维护成本,那么状态管理方案那么多,它们有什么不同,我们又该如何选择适合当前应用的方案呢?
本期将主要就 react 的常用状态管理方案进行对比分析,希望对各位看客有帮助。
React 状态管理方案
### 方案介绍
hooks context
react-redux
mobx
zustand
jotai
recoil
valtio
方案对比
框架 | 原理 | 优点 | 缺点 |
---|---|---|---|
hooks context | 基于 react hook,开发者可实现内/外部存储 | ||
react-redux | Flux思想,发布订阅模式,遵从函数式编程,外部存储 | ||
mobx | 观察者模式 + 数据截止,外部存储 | ||
zustand | Flux思想,观察者模式,外部存储 | ||
jotai | 基于 react hook,内部存储 | ||
recoil | 进阶版 jotai,基于 react hook + provider context,内部存储 | 相对于 jotai而言,会更重一些,但思想基本不变,拥有一些 jotai 未支持的特性及 api,如: |
拥有 jotai 所有的缺点,且相对于 jotai 而言: |
valtio | 基于数据劫持,外部存储 |
Source
hooks context
1.使用 react hooks + context 进行方便快捷的状态管理
2.使用 react hooks + context 构建 redux 进行状态管理
react-redux
mobx
1 | import React from "react" |
zustand
1 | import { create } from 'zustand' |
jotai
1 | import { atom } from 'jotai' |
recoil
1 | const fontSizeState = atom({ |
valtio
1 | import { proxy, useSnapshot } from 'valtio' |
相关建议
- 如果你需要useState+useContext的替代品,那么jotai非常适合,即原子化的组件状态管理或少量组件间状态共享。
- 如果你习惯了redux或喜欢react的自然不可变更新,那么zustand将非常适合。
- 如果你习惯了vue/ slute /mobx,或者是JS/React的新手,valtio的可变模型将很适合。
- 如果你在使用 zustand(redux/等不可变数据模型) + immer,建议改用valtio(mobx)
- mobx有actions概念,而valtio概念更为简单(自由),如果你希望工程更为规范,可以使用mobx,如果是希望工程更为自由便捷,可以使用valtio
- recoil与jotai的编程思想类似,但提供了更多的 api 与 特性,针对原子状态拥有更多的可操作性,同时包体积也更大,但由于recoil功能庞大,其使用相对于jotai会繁琐一些,如果你希望工程轻巧便捷可以选用jotai,如果你想试试原子状态更多的可能性,那么试试recoil吧。