技术文献

React:Redux ToolKit (js)

2026-10-03

安装RTK:

npm i react-redux @reduxjs/toolkit


步骤:

㈠创建一个或多个数据切片

数据切片包含三部分内容:①切片名称name;②数据initialState;③操作数据的方法reducers;

⑴创建用户数据切片:/src/stores/user.js

import {createSlice} from "@reduxjs/toolkit";
const userSlice=createSlice({
   name:'user-Slice',
   initialState:{
       name:'张三',
       gender:'男',
       age:18
   },
   reducers:{
       setName(state,action){
           //正统的写法:因为传统的根据数据不可变的原则来写。
          /* return {
               ...state,
               name: action.payload,
           }*/
           //只有在Redux ToolKit里面可以直接违法本规则(数据不可变)
           state.name = action.payload;
       },
       setGender(state,action){
           state.gender=action.payload;
       },
       setAge(state,action){
           state.age=action.payload;
       }
   }
})

export default userSlice

②创建商品数据切片:/src/stores/goods.js

import {createSlice} from "@reduxjs/toolkit";
const goodsSlice = createSlice({
   name: "goods-slice",
   initialState: {
       name:'苹果',
       price:100,
   },
   reducers: {
       setName(state, action) {
           state.name = action.payload;
       },
       setPrice(state, action) {
           state.price = action.payload;
       }
   }
})
export default goodsSlice;

㈡将切片合并汇总到一个入口文件,关键词是configureStore,reducer

文件:/src/stores/index.js

※导入的是每个切片的reducer

import {configureStore} from "@reduxjs/toolkit";
import userSlice from "./user.js";
import goodsSlice from "./goods.js";

const store=configureStore({
   reducer:{
       user:userSlice.reducer,
       goods:goodsSlice.reducer,
   }
})

㈢顶层根组件中注入入口文件(提供数据),关键词是:Provider

import {Provider} from "react-redux";
import store from "./store";
...
<Provider store={store}>
   <App />
</Provider>

㈣每个组件中,使用数据,引用数据(useSelector)和方法(useDispatch)

import {useDispatch, useSelector} from "react-redux";
const Child=()=>{
   const user=useSelector(state=>state.user);
   const dispatch=useDispatch();
   return
       <>
        <h1>子组件-{JSON.stringify(user)}</h1>
           <button onClick={()=>dispatch({type:'user-slice/setAge',paylosd:user.age+1})}>加</button>
       </>
}
export default Child;