FORMA

状态管理

React 组件内 state 用 Hooks;跨组件共享状态可选 ContextRedux ToolkitZustand 等。见 Context Hook

选型简表

场景建议
父子/兄弟局部共享提升 state + props
主题、语言、当前用户(低频)Context
服务端列表/详情、缓存、重试TanStack Query
复杂客户端全局状态、可预测更新Redux Toolkit
中小型全局状态、API 简单Zustand

勿把所有数据放入全局 store;服务端状态客户端 UI 状态分离是常见架构原则(见 Redux 官方 服务端状态 vs 客户端状态 说明)。

Redux Toolkit(RTK)

官方推荐的 Redux 写法,内置 Immer、异步 createAsyncThunk、DevTools。

ts
import { configureStore, createSlice } from "@reduxjs/toolkit";

const counterSlice = createSlice({
  name: "counter",
  initialState: { value: 0 },
  reducers: {
    increment(state) {
      state.value += 1;
    },
  },
});

export const store = configureStore({
  reducer: { counter: counterSlice.reducer },
});

组件侧使用 react-reduxuseSelectoruseDispatch

Zustand

极简 store,无 Provider 包裹(除非需要 SSR 等):

ts
import { create } from "zustand";

type BearStore = {
  bears: number;
  increase: () => void;
};

export const useBearStore = create<BearStore>((set) => ({
  bears: 0,
  increase: () => set((s) => ({ bears: s.bears + 1 })),
}));
tsx
const bears = useBearStore((s) => s.bears);

TanStack Query(服务端状态)

管理 fetch 的 loading、error、缓存、失效与重新请求:

tsx
const { data, isPending, error } = useQuery({
  queryKey: ["user", userId],
  queryFn: () => fetchUser(userId),
});

与 Redux 互补:Query 管远程数据,Redux/Zustand 管纯客户端状态。

参考文献

以下链接在编写时均可正常访问:

资料说明
Redux Toolkit 文档RTK(英文)
React Redux绑定 React
Zustand 文档英文
TanStack Query 文档React 集成

Series

react

14 / 16