React中redux、react-redux、@reduxjs/toolkit状态管理库的使用方式

ops/2024/9/24 3:30:03/

效果

在这里插入图片描述

下载依赖

javascript">npm install redux react-redux @reduxjs/toolkit --save

在src目录下创建文件

在这里插入图片描述

  1. 创建index.ts文件
import { configureStore } from '@reduxjs/toolkit'
import userSlice from './userReducer'const store = configureStore({reducer: {user: userSlice.reducer}
})
// 订阅 store
// store.subscribe(() => console.log('subscribe: ', store.getState()))export default store
  1. 创建userReducer.ts文件
javascript">import { createSlice } from '@reduxjs/toolkit'const userSlice = createSlice({name: 'user',initialState: {str: '我是redux未修改前的文字'},reducers: {editStr(state, action) {// Redux Toolkit 允许在 reducers 中编写 "mutating" 逻辑。// 它实际上并没有改变 state,因为使用的是 Immer 库,检测到“草稿 state”的变化并产生一个全新的,// 基于这些更改的不可变的 statestate.str = action.payload}}
})
export default userSlice

在入口文件中引用

import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import { Provider } from 'react-redux';
import store from './store/index'const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement
);root.render(<Provider store={store}><App /></Provider>
);

在函数式组件中使用

import { useSelector, useDispatch } from 'react-redux'
import { useNavigate } from 'react-router-dom';
import React, { useState } from 'react';
import { Button } from 'antd';const Home: React.FC = () => {const navigate = useNavigate();const { str } = useSelector((state:StoreType.State) => state.user)let dispatch = useDispatch()const [msg] = useState<string>('点击改变redux');const handleChange = () => {dispatch({type: 'user/editStr',payload: '我是工作台修改redux后的值'})}return (<><h1>工作台</h1><Button type="primary" onClick={handleChange}>{msg}</Button><Button type="primary" onClick={() => navigate('/authMag/userMag')}>跳转到用户页面</Button><h1>{str}</h1></>) 
}export default Home

在类组件中使用

import React from "react"
import { Button } from 'antd';
import { connect } from "react-redux";
import { Link } from 'react-router-dom'type PropType = {user: {str: string},dispatch: Function
}type StateType = {msg: string
}class User extends React.Component<PropType, StateType> {constructor(props: PropType | Readonly<PropType>) {super(props)this.state = {msg: '点击改变redux'}}componentDidMount() {console.log('User-componentDidMount')}handleChange = () => {this.props.dispatch({type: 'user/editStr',payload: '我是User页修改redux后的值'})}render() {const { msg } = this.stateconst { str } = this.props.userreturn (<><h1>用户管理</h1><Button type="primary" onClick={this.handleChange}>{msg}</Button><Button type="primary"><Link to="/home">跳转到工作台页面</Link>        </Button><h1>{str}</h1></>)}
}
const mapStateToProps = (state:PropType) => ({user: state.user
});const mapDispatchToProps = (dispatch: Function) => ({dispatch
});
export default connect(mapStateToProps, mapDispatchToProps)(User);

http://www.ppmy.cn/ops/13295.html

相关文章

MATLAB实现禁忌搜索算法优化柔性车间调度fjsp

禁忌搜索算法的流程可以归纳为以下几个步骤&#xff1a; 初始化&#xff1a; 利用贪婪算法或其他局部搜索算法生成一个初始解。清空禁忌表。设置禁忌长度&#xff08;即禁忌表中禁止操作的期限&#xff09;。邻域搜索产生候选解&#xff1a; 通过特定的搜索算子&#xff08;如…

消息服务应用1——java项目使用websocket

在当前微服务项目中&#xff0c;由于业务模块众多&#xff0c;消息服务的使用场景变得异常活跃。而WebSocket由于其自身的可靠性强&#xff0c;实时性好&#xff0c;带宽占用更小的优势&#xff0c;在实时通讯应用场景中独占鳌头&#xff0c;加上HTML5标准的普及流行&#xff0…

docker容器

一、docker容器操作 1.1 容器创建 将镜像加载到容器的过程。新创建的容器默认处于停止状态&#xff0c;不运行任何程序&#xff0c;需要在其中发起一个进程来启动容器。 格式&#xff1a;docker create [选项] 镜像 常用选项&#xff1a; -i容器开启标准输入-t让docker分配一个…

学习STM32第十八天

RTC外设详解 一、RTC实时时钟实验 RTC配置流程如下 解锁备份域写保护 RTC核心寄存器在备份域内&#xff0c;备份域归属PWR&#xff0c;因此需要开启PWR时钟再使能备份与中寄存器的写访问。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //电源控制寄存器在APB1…

二次封装el-carousel

我们创建了一个名为MyCarousel的组件&#xff0c;它接受el-carousel的一些常用属性作为props&#xff0c;并默认提供了一些值。我们还通过setup函数返回了所有props&#xff0c;以便它们可以在模板中被使用。 1.MyCarousel.vue组件 <!-- 轮播图片 --> <template>…

【配电网故障定位】基于二进制混合灰狼粒子群算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#79】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制混合灰狼粒子群算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络…

Music Tag Editor Pro for Mac:音乐标签编辑软件

Music Tag Editor Pro for Mac是一款功能强大的音乐标签编辑软件&#xff0c;专为Mac用户设计&#xff0c;旨在帮助用户轻松管理音乐库中的标签信息。 Music Tag Editor Pro for Mac v8.0.0中文激活版下载 该软件支持多种音频格式&#xff0c;包括MP3、M4A、FLAC、APE等&#x…

测试开发面经记录

目录 字节测试&#xff08;1h&#xff09; 米哈游业务测试&#xff08;40min&#xff09; 美团测开&#xff08;50min&#xff09; 美图测试&#xff08;1h30min&#xff09; 腾讯云智测试&#xff08;24min&#xff09; 腾讯测试一面&#xff08;35min&#xff0c;凉&am…