面试被问到-redux-toolkit用法

安装使用
npm install @reduxjs/toolkit react-redux

  1. 创建store
js 复制代码
// store.js
import { configureStore } from "@reduxjs/toolkit";
// import { configureStore } from "../rtk-nut";
import countReducer from "./counterSlice";

export default configureStore({
  reducer: {
    counter: countReducer,
  },
});
  1. 创建 Slice
js 复制代码
import { createSlice } from "@reduxjs/toolkit";

export const counterSlice = createSlice({
  name: "counter",
  initialState: {
    count: 0,
  },
  reducers: {
    increment: (state) => {
      state.count++;
    },
    decrement: (state) => {
      state.count -= 1;
    },
    incrementByAmount: (state, action) => {
      console.log(action, "action"); // {type: 'counter/incrementByAmount', payload: 2}

      state.count += action.payload;
    },
  },
});

export const { increment, decrement, incrementByAmount } = counterSlice.actions;
export default counterSlice.reducer;
  1. 组件中使用
js 复制代码
import { useReducer, useEffect } from "react";
import store from "../store/rtkStore";
import { increment, decrement, incrementByAmount } from "../store/counterSlice";

export default function ReduxToolkitPage() {
 const count = store.getState().counter.count;
 const [, forceUpdate] = useReducer((x) => x + 1, 0);

 useEffect(() => {
   const unlistener = store.subscribe(() => {
     forceUpdate();
   });
   return () => {
     unlistener();
   };
 }, []);
 return (
   <div>
     <h2>ReduxToolkitPage</h2>
     <div>{count}</div>
     <button
       onClick={() => {
         store.dispatch(increment());
       }}
     >
       increment
     </button>
     <button
       onClick={() => {
         store.dispatch(decrement());
       }}
     >
       decrement
     </button>
     <button
       onClick={() => {
         store.dispatch(incrementByAmount(2));
       }}
     >
       incrementByAmount
     </button>
   </div>
 );
}

redux-toolkit原理实现 todo...

相关推荐
妖孽白小白9 小时前
el-select的内容续写实现
前端·vue.js·elementui
不可能片场9 小时前
Electron 主进程热补丁:单行 JS 安全打法
前端·electron
梨想橙汁9 小时前
Pinia 状态管理实战:定义 Store、修改数据、模块拆分
前端·vue.js
高申航9 小时前
Vue 3 + DYMO Connect Framework 实战:从标签模板到打印服务的完整实现
前端·javascript·vue.js
梨想橙汁9 小时前
Vue3 组件开发:生命周期钩子,组件之间通信全方案
前端·vue.js
雪芽蓝域zzs9 小时前
分页组件 + el-config-provider 中文国际化 + 靠右布局
前端·javascript·vue.js
恋猫de小郭9 小时前
iPhone Duo 适配详解,需要改变的不止是布局模型
前端·flutter·ios
萧行之9 小时前
Observable Plot 源码深度解析——4 核心抽象逐项学习
前端·学习·数据可视化
今日无bug10 小时前
为什么大模型回答总是一个字一个字蹦出来?聊聊 SSE 流式输出与 BFF 层的那些事
前端·llm
CIO_Alliance10 小时前
AI微调系列(1)| 全量微调、LoRA、QLoRA 三种方案怎么选
前端·人工智能·神经网络·机器学习·embedding·企业ai转型