当前位置: 首页 > article >正文

React使用Redux

Redux

Redux 是一个用于 JavaScript 应用的状态容器,Redux 的核心思想是将应用程序的所有状态存储在一个单一的、全局的 store 中,并提供了一套规则来确保状态以一种可预测的方式进行变更.

安装

npm i @reduxjs/toolkit react-redux

创建目录

创建store文件夹,在文件夹下创建index.js(注册文件)和modules以及他下面的countStore.js(状态文件)
在这里插入图片描述

编写状态管理类

// 导入createSlice函数,用于创建Redux状态管理中的slice
import {createSlice} from "@reduxjs/toolkit";

// 创建一个名为"counter"的slice,用于管理计数器的状态
const countStore = createSlice(
    {
        // 定义slice的名称
        name:"counter",
        // 定义初始状态,计数器的初始值为0
        initialState: {
            count:0
        },
        // 定义 reducer 函数,用于处理状态变化
        reducers:{
            // 增加计数器的值
            increment:(state,action)=>{
                // 将传入的值加到当前计数器上
                state.count+=action.payload
            },
            // 减少计数器的值
            decrement:(state)=>{
                // 当前计数器值减1
                state.count-=1
            }
        }
    }
)

// 从生成的actions中解构出increment和decrement
const {increment,decrement} = countStore.actions
// 获取slice的reducer函数
const countReducer = countStore.reducer
// 导出increment和decrement动作,供外部调用
export {increment,decrement}
// 导出reducer函数,供Redux store使用
export default countReducer

注册store

import {configureStore} from "@reduxjs/toolkit";
import countReducer from "./modules/countStore.js";

const store = configureStore({
    reducer:{
        counter:countReducer
    }
})

export default store

使用Redux

修改main.jsx,将redux挂载到组件中

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App.jsx'
import store from "./store/index.js";
import { Provider } from "react-redux";

createRoot(document.getElementById('root')).render(
  <StrictMode>
      <Provider store={store}>
          <App />
      </Provider>
  </StrictMode>
)

在组件中使用

import {useDispatch, useSelector} from "react-redux";
import {increment,decrement} from './store/modules/countStore.js'
function App() {
    const { count } = useSelector(state => state.counter)
    const dispatch = useDispatch();
   return (
       <div>
           <div>
               <h3>{count}</h3>
               <button onClick={() => dispatch(increment(1))}>+</button>
               <button onClick={() => dispatch(increment(10))}>+10</button>
               <button onClick={() => dispatch(decrement())}>-</button>
           </div>
       </div>
   )
}

export default App


http://www.kler.cn/a/471791.html

相关文章:

  • Hive sql执行文件合并配置参数
  • vue3+vite+tdesign实现日历式可编辑的排课班表
  • 概率论与数理统计--期末
  • 第21章 汇编语言--- DMA(直接内存访问)
  • A second-price auction
  • MySQL 间隙锁避免“可重复读”出现“幻读”
  • OpenCV在现代社会中的应用
  • 【机器学习:四、多输入变量的回归问题】
  • MySQL 如何赶上 PostgreSQL 的势头?
  • 特种设备安全管理人员免费题库限时练习(判断题)
  • NVIDIA在CES 2025上的三大亮点:AI芯片、机器人与自动驾驶、全新游戏显卡
  • [创业之路-241]:《从偶然到必然-华为研发投资与管理实践》-2- IPD流程中的业务线、技术线、职能支撑线
  • 【STM32】I2C为什么要开漏输出和上拉电阻
  • [微服务]redis主从集群搭建与优化
  • 前端 动图方案
  • 【Axure高保真原型】环形进度条(开始暂停效果)
  • 装修房子,你会选购灯和搭配灯光吗?
  • 【竞技宝】CS2:HLTV2024职业选手排名TOP8-broky
  • 智能座舱︱AUTO TECH China 2025广州国际汽车智能座舱及车载显示技术展览会于11月盛大开幕
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/07】小测-【第7章 GVRP链路捆绑】理论和实操解析