React笔记(九)RTK

一、RTK的简介

1、官网地址

Redux Toolkit: 概览 | Redux 中文官网

2、Redux toolkit是什么

Redux Toolkit 是 Redux 官方强烈推荐,开箱即用的一个高效的 Redux 开发工具集。它旨在成为标准的 Redux 逻辑开发模式,我们强烈建议你使用它。

它包括几个实用程序功能,这些功能可以简化最常见场景下的 Redux 开发,包括配置 store、定义 reducer,不可变的更新逻辑、甚至可以立即创建整个状态的 "切片 slice",而无需手动编写任何 action creator 或者 action type。它还自带了一些最常用的 Redux 插件,例如用于异步逻辑 Redux Thunk,用于编写选择器 selector 的函数 Reselect ,你都可以立刻使用。

二、RTK入门使用

1、安装依赖

javascript 复制代码
yarn add react-redux
yarn add @reduxjs/toolkit

2、目录结构

javascript 复制代码
|-src
    |-store
        |-modules
            |-shopcartList.js
            |-counter.js
        |-index.js

3、创建slice切片

位置:src/store/modules/counter.js

javascript 复制代码
import {createSlice} from '@reduxjs/toolkit'
const counter=createSlice({
    //命名空间,name值会作为action type的前缀
    name:'counter',
    //初始化状态
    initialState:{
        count:0
    },
    //定义reducer更新状态的函数
    reducers:{
        increment(state,action){
            state.count=state.count+action.payload
        },
        subtraction(state,action){
            state.count=state.count-action.payload
        }
    }
})
//导出action函数
export const {increment,subtraction}=counter.actions
//导出reducer
export default counter.reducer

4、创建store

位置:src/store/index.js

javascript 复制代码
import {configureStore} from '@reduxjs/toolkit'
import counter from './modules/counter'
const store=configureStore({
  reducer:{
    counter
  }  
})
export default store

5、在入口集成redux

javascript 复制代码
import {Provider} from 'react-redux'
import store from './store';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <Provider store={store}>
        <App></App>
    </Provider>
);

6、在组件中获取和更新状态

javascript 复制代码
import React from 'react'
import {useSelector,useDispatch} from 'react-redux'
import {increment} from '../store/modules/counter'
export default function Counter() {
  const num=useSelector((state)=>{
    console.log('state',state);
    return state.counter.count
  })
  const dispatch=useDispatch()
  const add=(n)=>{
    dispatch(increment(n))
  }
  return (
    <div>
      <h1>计数器</h1>
      <div>{num}</div>
      <button onClick={()=>{add(2)}}>+</button>
    </div>
  )
}

三、RTK异步操作

  • 编写异步方法

位置:src/store/modules/counter.js

javascript 复制代码
export const subtractionAsync=(payload)=>{
    return async(dispatch,getState)=>{
        console.log('dipatch',dispatch);
        console.log('getState',getState());
        setTimeout(() => {
            dispatch(subtraction(payload))
        }, 4000);
    }
}
  • 在组件中调用
javascript 复制代码
import React from 'react'
import {useSelector,useDispatch} from 'react-redux'
import {subtractionAsync} from '../store/modules/counter'
export default function Counter() {
  const num=useSelector((state)=>{
    return state.counter.count
  })
  const dispatch=useDispatch()
  const jian=(n)=>{
    dispatch(subtractionAsync(n))
  }
  return (
    <div>
      <h1>计数器</h1>
      <div>{num}</div>
      <button onClick={()=>{jian(3)}}>异步-</button>
    </div>
  )
}
相关推荐
咬人喵喵5 分钟前
14 类圣诞核心 SVG 交互方案拆解(附案例 + 资源)
开发语言·前端·javascript
韩曙亮1 小时前
【Web APIs】元素滚动 scroll 系列属性 ② ( 右侧固定侧边栏 )
前端·javascript·bom·window·web apis·pageyoffset
珑墨1 小时前
【浏览器】页面加载原理详解
前端·javascript·c++·node.js·edge浏览器
FreeBuf_1 小时前
Next.js 发布扫描工具:检测并修复受 React2Shell 漏洞(CVE-2025-66478)影响的应用
开发语言·javascript·ecmascript
hd51cc1 小时前
MFC控件 学习笔记二
笔记·学习·mfc
馬致远2 小时前
Vue -组件入门
javascript·vue.js·ecmascript
御形封灵2 小时前
基于原生table实现单元格合并、增删
开发语言·javascript·ecmascript
Irene19913 小时前
Prettier 配置文件 .prettierrc.js 和 .prettierrc.json 的区别
javascript·json
Jack___Xue3 小时前
LangChain实战快速入门笔记(二)--LangChain使用之Model I/O
笔记·langchain