react的状态管理工具redux-toolkit(内置thunk插件)

redux-toolkit简称RTK,RTK是redux简化版的工具包,它可以帮我们进行对数据的操作和管理。

1.安装redux和redux-toolkit

npm i @reduxjs/toolkit react-redux -s

2.创建1个rtk文件,在里面在创建1个store.js文件和reducers文件夹(存放)每个数据模块的状态

3.在reducers文件夹创建1个dataSlice.js文件并开始使用rtk

4.导入rtk相关api

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

import { getDataApi } from "../../utils/api";          //导入相关后台数据的api

5.定义rtk初始状态initialState并暴露出来

export const initialState = {

data:'value'

}  

6.创建数据的模块切片createSlice并暴露出来

export const dataSlice = createSlice({

    name:'dataSlice',                         //数据模块的命名空间

    initialState:initialState,                //数据的初始状态

    reducers:{                                   //改变状态的同步方法

        dataAdd(state,{payload}){

            state.data+=payload

        },

    },

    extraReducers:(builder)=>{                //改变状态的异步方法

        builder.addCase(getData.fulfilled,(state,{payload})=>{

            state.data = payload

        })

    }

})

export const dataSelector = (state:any) => state.MyData.data  ;   //初始数据暴露出来

export const {dataAdd} = dataSlice.actions                      //同步方法暴露出来

export const getData = createAsyncThunk('dataSlice/getData',async (payload)=>{

    let res = await getDataApi(payload)

    return res.data;

})                                                                                //异步方法暴露出来

export default dataSlice.reducer;                                //将仓库暴露

7.在store.js文件中配置store并导入dataSlice并进行数据持久化

首先安装持久化插件

npm i redux-persist -s 

然后导入

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

import dataSlice from "./reducers/dataSlice";

import { persistStore,persistReducer} from 'redux-persist'

import storage from 'redux-persist/lib/storage'

const persistConfig = {  //数据持久化配置

    key: 'root',

    storage ,             //在localStorge中生成key为root的值

    blacklist:[]          //不持久数据的黑名单

}

export const rootReducer = combineReducers({ MyData:dataSlice})  //合并数据模块

const myPersistReducer = persistReducer(persistConfig, rootReducer) //持久化数据模块

export const store = configureStore({                                           //配置仓库

    reducer:myPersistReducer,

    middleware: (getDefaultMiddleware) =>

    getDefaultMiddleware({

      serializableCheck: false,                                             //不检查序列化

    })

})

export const persistore = persistStore(store)         //持久化仓库

8.在main,js文件中全局引入并包裹根组件

import { Provider } from 'react-redux'

import { store } from './rtk/store';

<Provider store={store}>

                <App/>

 </Provider>

9.组件中使用dataSlice的数据和方法

import { useDispatch, useSelector } from 'react-redux'

import { dataAdd, dataSelector } from '../../rtk/reducers/dataSlice'

  const data= useSelector(dataSelector)       //取dataSlice数据

  const dispatch = useDispatch()

 <div onClick={()=>dispatch(dataAdd(1))}>   //使用dataSlice方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值