简介:前言react项目中经常会用到全局状态库,目前个人常用的是 Redux Toolkit。下面具体来看怎么使用 Redux Toolkit。正文安装pnpm install @reduxjs/toolk...

前言

react项目中经常会用到全局状态库,目前个人常用的是 Redux Toolkit。下面具体来看怎么使用 Redux Toolkit。

正文

安装

pnpm install @reduxjs/toolkit react-redux

创建slice

//src/store/appSlice.js

const { createSlice } = require("@reduxjs/toolkit");

export const SimulationExecStatus = {
  None: 0,
  Start: 1,
  Executing: 2,
  Stop: 3,
  Pause: 4,
  Pending: 5,
  Error: 100,
};

const appSlice = createSlice({
  name: "app",
  initialState: {
    simulationExecStatus: SimulationExecStatus.Error,
  },
  reducers: {
    getSimulationExecStatus(state, action) {
      return state.simulationExecStatus;
    },
    setSimulationExecStatus(state, action) {
      state.simulationExecStatus = action.payload;
    },
  },
});

export const { getSimulationExecStatus, setSimulationExecStatus } =
  appSlice.actions;
export default appSlice.reducer;

创建store

//src/store/index.js

import { configureStore } from "@reduxjs/toolkit";

import appReducer from "./appSlice";

export const store = configureStore({
  reducer: {
    app: appReducer,
  },
});

引用store

import { createRoot } from "react-dom/client";
import { RouterProvider } from "react-router";
import { routes } from "@/routes";

import "@/assets/css/global.less";
import { Provider } from "react-redux";
import { store } from "./store";

createRoot(document.getElementById("root")).render(
  <Provider store={store}>
    <RouterProvider router={routes} />
  </Provider>
);

使用

设置值

const dispatch = useDispatch();
dispatch(setSimulationExecStatus(SimulationExecStatus.Pending));

获取值

 const { simulationExecStatus } = useSelector((state) => state.app);

最后

个人平时比较常用的就是当作一个全局变量。