Redux 三原则:单一 store(整个应用一份状态树,可直接序列化调试/回退)、状态只读(不能直接改,只能 dispatch action 描述「发生了什么」)、纯函数变更(reducer 接收旧状态与 action 返回新状态,副作用隔离在中间件)。它把状态变化做成可追踪的事件流,DevTools 里每一步都能回放。
Redux Toolkit(RTK)是官方现代化的写法:createSlice 自动生成 action/reducer、configureStore 默认集成 immer(写「可变」代码改不可变状态)、createAsyncThunk 处理异步。选型上:大型应用/有复杂状态流转与时间旅行调试需求选 Redux;中小应用 Zustand/Jotai 更轻;简单共享用 Context 就够。
const { configureStore, createSlice, useSelector, useDispatch, Provider } = RTK;
// ★ createSlice:一个切片 = 状态 + 同步 reducers
const counter = createSlice({
name: 'counter',
initialState: { value: 0 },
reducers: {
// immer 让你「直接改」状态,自动产出不可变更新
increment: (state) => { state.value += 1; },
add: (state, action) => { state.value += action.payload; },
},
});
export const { increment, add } = counter.actions;
// 单一 store
const store = configureStore({ reducer: { counter: counter.reducer } });
// 组件:useSelector 订阅 + useDispatch 派发
function Counter() {
const n = useSelector(s => s.counter.value);
const dispatch = useDispatch();
return <button onClick={() => dispatch(increment())}>{n}</button>;
}
// 根部:<Provider store={store}><Counter /></Provider>