React状态管理
全局状态
React 常用的有如下状态管理库
Redux/Redux Toolkit
Redux 是 React 常用的状态管理库,核心为 Action -> Reducer -> State -> View
Redux Toolkit 简化了 Redux 的使用,且更好的结合 Hooks 使用
export const counterSlice = createSlice({ name: "counter", initialState: {}, reducers: {},});
const store = configureStore({ reducer: { counter: counterSlice.reducer, },});特点
- 中心化数据存储
- 单向数据流
- 模板代码较多,RTK 极大的简化了模板代码
Recoil
由 Facebook 推出的原子化状态管理库,核心为 Atoms 和 Selectors。数据存储于各个 Atoms 中,各个 Atoms 可组合使用,当 Atom 数据出现变更,迫使使用过 Atom 的组件更新。
const textState = atom({ key: "textState", default: "",});特点
- API 设计符合 React Hooks
- 细粒度控制,性能较高
- 社区成熟度不足
Jotai
也是原子化的状态管理库,和 Recoil 类似,但 API 更加轻量
const priceAtom = atom(10);特点
- API 和 Recoil 类似,更加轻量
- 细粒度控制,性能较高
- 可以在 React 之外使用
Zustand
简单的,基于 Hooks 的状态管理库
const useBearStore = create((set) => ({ bears: 0, increasePopulation: () => set((state) => ({ bears: state.bears + 1 })), removeAllBears: () => set({ bears: 0 }),}));特点
- 极简,代码量少,API 少
- 性能较好
- 可以在 React 之外使用
MobX
基于可观察对象 (Observables) 和响应式编程 (Reactive Programming)
const state = makeAutoObservable({ secondsPassed: 0, increase() { this.secondsPassed += 1; }, reset() { this.secondsPassed = 0; },});特点
- 响应式
TAN Store(React Query)
服务器状态管理,不用于管理客户端状态,可以和 Alova.js 对比
特点
- 简化了向服务端获取数据的流程,内置了缓存,Loading,分页等等功能
- 概念较多,不易于理解
Context + Hooks
不借助三方状态管理库,由 React 内部 API 实现全局状态管理
特点
- 简单直观,无需引用三方库
- Context API 天生的性能问题
局部状态
State Hooks
const [state, setState] = useState(0);