RTK的使用教程

 常用 API

  • configureStore :创建 Redux store 实例
  • createSlice :创建切片处理
  • createAction :创建 actions 函数
  • createReducer :创建 reducer 函数
  • createAsyncThunk :处理异步动作
  • 1、先创建一个 store 文件夹,新建 index.ts 文件

  • 导入 configureStore 创建一个 store ,内部使用 reducer 整合模块,导出 store
  • 导出 全局数据的类型定义 RootState 和全局处理函数 AppDispatch 的类型定义
index.ts文件

import { configureStore } from "@reduxjs/toolkit"
import appReducer from "./modules/app"
const store = configureStore({
    // 整合模块
    reducer: {
        app: appReducer,
    }
})


export type RootState = ReturnType<typeof store.getState>
export type AppDispatch = typeof store.dispatch
export default store;

在根目录 index.ts 文件中,引入 react-redux 的 provider,并将导出的 store 当作 prop传递给它。

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.less';
import App from './App';
import { Provider } from 'react-redux';
import store from './store';

import { BrowserRouter } from "react-router-dom"

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <Provider store={store}>
      <BrowserRouter>
        <App />
      </BrowserRouter>

    </Provider>

  </React.StrictMode>
);

  • 2、再新建 hook.ts 文件

  • 导出 useAppDispatch 和 useAppSelector
  • 导出的 useAppDispatch 要遵循  AppDispatch 规范,useAppSelector 要遵循 RootState规范
  • useAppDispatch:将数据传给全局处理函数,调用 dispatch 返回一个 reducer 函数
  • useAppSelector:将数据传给全局数据
import { useSelector, useDispatch, TypedUseSelectorHook } from 'react-redux'

import { AppDispatch, RootState } from './index'

export const useAppDispatch: () => AppDispatch = useDispatch

export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
  • 3、创建一个 modules 文件夹,内部包含 app.ts 文件

  • 导入 createSlice 方法创建一个 appSlice 。每一个 slice 里面包含了reducers 和 name、initialState,可以实现模块化的封装。导出 appSlice
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import store2 from "store2"

interface IState {
    count: number,
    collapsed: boolean
}

const initialState: IState = {
    count: 100,
    collapsed: store2.get('collapsed') == 'true'
}

const appSlice = createSlice({
    name: 'app',//模块名称
    initialState,//初始化状态
    reducers: {
 // 这里的属性会自动的导出为 actions,在组件中可以直接通过 dispatch 进行触发
        addCount(state, action: PayloadAction<number>) {
            state.count += action.payload
        },
        setCollapsed(state, action: PayloadAction<boolean>) {

            // 保留用户的使用习惯,持久化
            store2.set('collapsed', String(action.payload))
            state.collapsed = action.payload
        }
    }
})

//暴露可以修改组件状态对的函数
export const { addCount, setCollapsed } = appSlice.actions

//默认暴露出模块的reducer
export default appSlice.reducer

4、使用

1、导入
import { useAppDispatch } from '@/store/hook';

2、定义
const dispatch = useAppDispatch()

3、使用
//保存到 rtk 中
dispatch(changeLoginState(true))
dispatch(changeAdminName(result.adminname))
dispatch(changeToken(result.token))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值