[React] React-Redux 快速入门

文章目录

      • 1.安装 Redux Toolkit 和 React Redux
      • 2.创建 Redux Store
      • 3.为 React 提供 Redux Store​
      • 4.创建 Redux State Slice
      • 5.添加 Slice Reducers 到 Store
      • 6.在 React 组件中使用 Redux State 和 Actions​
      • 7.总结

1.安装 Redux Toolkit 和 React Redux

npm install @reduxjs/toolkit react-redux

2.创建 Redux Store

在这里插入图片描述

创建一个命名为 src/app/store.js 的文件。从 Redux Toolkit 中导入 configureStore API。我们将开始创建一个空的 Redux store,并导出它

import { configureStore } from '@reduxjs/toolkit';export default configureStore({reducer: {},
});

这将创建一个 Redux store,并自动配置 Redux DevTools 扩展,以便你可以在开发时检查 store。

3.为 React 提供 Redux Store​

创建 store 后,我们可以通过在 src/index.js 中的应用程序外层放置一个 React Redux 来使其对我们的 React 组件可用。导入我们刚刚创建的 Redux store,在 的外层放置一个 ,并将 store 作为 prop 传递:

在这里插入图片描述

在这里插入图片描述

index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import store from './app/store';
import { Provider } from 'react-redux';// 从 React 18 开始
const root = ReactDOM.createRoot(document.getElementById('root'));root.render(<Provider store={store}><App /></Provider>
);

4.创建 Redux State Slice

添加一个名为 src/store/module/counterSlice.js 的新文件。在该文件中,从 Redux Toolkit 导入 createSlice API。

创建 slice 需要一个字符串名称来标识 slice,一个初始 state 值,以及一个或多个 reducer 函数来定义如何更新 state。创建 slice 后,我们可以导出生成的 Redux action creators 和整个 slice reducer 函数。

import { createSlice } from '@reduxjs/toolkit';export const counterSlice = createSlice({name: 'counter',initialState: {value: 0,},reducers: {increment: (state) => {// Redux Toolkit 允许我们在 reducers 中编写 mutating 逻辑。// 它实际上并没有 mutate state 因为它使用了 Immer 库,// 它检测到草稿 state 的变化并产生一个全新的基于这些更改的不可变 statestate.value += 1;},decrement: (state) => {state.value -= 1;},incrementByAmount: (state, action) => {state.value += action.payload;},},
});// 为每个 case reducer 函数生成 Action creators
export const { increment, decrement, incrementByAmount } = counterSlice.actions;export default counterSlice.reducer;

5.添加 Slice Reducers 到 Store

需要从 counter slice 中导入 reducer 函数并将其添加到我们的 store 中。通过在 reducers 参数中定义一个字段,我们告诉 store 使用这个 slice reducer 函数来处理该 state 的所有更新。

在这里插入图片描述

import { configureStore } from "@reduxjs/toolkit";
import counterReducer from "src/store/module/counterSlice";export default configureStore({reducer: {counter: counterReducer,},
});

6.在 React 组件中使用 Redux State 和 Actions​

使用 React Redux hooks 让 React 组件与 Redux store 交互。我们可以使用 useSelector 从 store 中读取数据,并使用 useDispatch dispatch actions。创建一个包含 组件的 src/pages/counter/index.js 文件,然后将该组件导入 App.js 并在 中渲染它。使用 React Redux hooks 让 React 组件与 Redux store 交互。我们可以使用 useSelector 从 store 中读取数据,并使用 useDispatch dispatch actions。创建一个包含 组件的 src/pages/counter/index.js 文件,然后将该组件导入 App.js 并在 中渲染它。

import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { decrement, increment } from '@/store/modules/counterSlice';function Counter() {const count = useSelector((state) => state.counter.value);const dispatch = useDispatch();return (<div><div><buttonaria-label="Increment value"onClick={() => dispatch(increment())}>Increment</button><span>{count}</span><buttonaria-label="Decrement value"onClick={() => dispatch(decrement())}>Decrement</button></div></div>);
}export default Counter;

在这里插入图片描述

7.总结

  1. 使用 configureStore 创建 Redux store
    在这里插入图片描述

  2. 为 React 应用程序组件提供 Redux store
    在这里插入图片描述

  3. 使用 createSlice 创建一个 Redux slice reducer
    在这里插入图片描述
    3.1 使用字符串名称,初始 state 和命名的 reducer 函数调用 createSlice
    3.2 Reducer 函数可以使用 Immer 来 mutate state
    3.3 导出生成的 slice reducer 和 action creators

  4. 在 React 组件中使用 React Redux useSelector/useDispatch hooks
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考 系统架构设计师系列知识点之系统架构评估(8)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之系统架构评估&#xff08;7&#xff09; 所属章节&#xff1a; 第8章. 系统质量属性与架构评估 第2节. 系统架构评估 8.2.2 系统架构评估方法 相关试题 7. 架构权衡分析方法&#xff08;Architecture Tradeoff Analy…

常见笔试题-泛型擦除

了解泛型吗&#xff1f; 参考文章&#xff1a;https://blog.csdn.net/qq_43546676/article/details/128790980 泛型就是在编译时检查类型安全&#xff0c;并且不需要强制进行类型转换 泛型擦除了解吗&#xff1f; 泛型擦除即在编译生成的字节码中&#xff0c;所有声明泛型的…

KaiOS APN配置文件apn.json调试验证方法(无需项目全编)

1、KaiOS 的应用就类似web应用&#xff0c;结合文件夹路径webapp字面意思理解。 2、KaiOS APN配置文件源代码在apn.json&#xff0c; &#xff08;1&#xff09;apn.json可以自定义路径&#xff0c;通过配置脚本实现拷贝APN在编译时动态选择路径在机器中生效。 &#xff08;…

集合框架:List系列集合:特点、方法、遍历方式、ArrayList,LinkList的底层原理

目录 List集合 特有方法 遍历方式 1. 使用普通 for 循环&#xff1a; 2. 使用增强型 for 循环&#xff08;foreach&#xff09;&#xff1a; 3. 使用迭代器&#xff08;Iterator&#xff09;&#xff1a; 4. 使用 Java 8 的流&#xff08;Stream&#xff09;API&#xff…

Softing新版HART多路复用器现支持图尔克excom和西门子ET 200iSP等远程I/O

Softing工业自动化最近升级了用于访问配置和诊断数据的smartLink SW-HT软件&#xff0c;现在该软件可支持访问图尔克excom和西门子ET 200iSP等远程I/O。 &#xff08;smartLink SW-HT支持访问配置和诊断数据&#xff09; 越来越多的新型远程I/O选择使用以太网来替代PROFIBUS连接…

系列十一、拦截器(二)#案例演示

一、案例演示 说明&#xff1a;如下案例通过springboot的方式演示拦截器是如何使用的&#xff0c;以获取Controller中的请求参数为切入点进行演示 1.1、前置准备工作 1.1.1、pom <dependencies><!-- spring-boot --><dependency><groupId>org.spring…

cstring函数

string 1.char str[]类型 fgets(s,10000,stdin) cin.getline(cin,10000) strlen(str) sizeof 求静态数组长度 2.string类型 getline(cin,a) cin.getline(cin,10000) str.lenth() str.size() cin 遇到空格就停止 3.gets 函数 char str[20]; gets(str); 4.puts 函…

分享一下怎么做小程序营销活动

小程序营销活动已经成为现代营销的必备利器&#xff0c;它能够帮助企业提高品牌知名度、促进产品销售&#xff0c;以及加强与用户的互动。然而&#xff0c;要想成功地策划和执行一个小程序营销活动&#xff0c;需要精心设计和全面规划。本文将为您介绍小程序营销活动的策划和执…

OpenSign 开源 PDF 电子签名解决方案

OpenSign 是一个开源文档电子签名解决方案&#xff0c;旨在为 DocuSign、PandaDoc、SignNow、Adobe Sign、Smartwaiver、SignRequest、HelloSign 和 Zoho Sign 等商业平台提供安全、可靠且免费的替代方案。 特性&#xff1a; 安全签名&#xff1a;利用最先进的加密算法来确保…

easyHttp -- 轻量级的 HTTP 客户端工具包

easyHttp gitte地址:easy-http 介绍 easyHttp 是一个轻量级的 HTTP 客户端工具包&#xff0c;专为 Java 设计&#xff0c;使得基本的 HTTP 请求变得异常简单。该库主要针对常见的 HTTP 请求提供了简洁的 API&#xff0c;使得开发者无需面对复杂的设置。当前版本已支持基本的请…

私有化部署大模型:5个.Net开源项目

从零构建.Net前后端分离项目 今天一起盘点下&#xff0c;10月份推荐的5个.Net开源项目&#xff08;点击标题查看详情&#xff09;。 1、BootstrapBlazor企业级组件库&#xff1a;前端开发的革新之路 BootstrapBlazor是一个用于构建现代Web应用程序的开源框架&#xff0c;它基…

NOIP2023模拟13联测34 origen

题目大意 给定 n n n个整数 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1​,a2​,…,an​&#xff0c;求 ∑ i 1 n ∑ j i n ( ⨁ k i j a k ) 2 \sum\limits_{i1}^n\sum\limits_{ji}^n(\bigoplus\limits _{ki}^ja_k)^2 i1∑n​ji∑n​(ki⨁j​ak​)2 输出答案模 998244353…

Jmeter分布式压测 —— 易踩坑点

1、压测机 无论是从成本角度还是维护的难易方面&#xff0c;压测机的数量&#xff0c;适量就好。举个例子&#xff0c;8C16G的一台服务器&#xff0c;部署Jmeter后&#xff0c;根据我个人的测试比对数据&#xff0c;配置≤1500个线程数&#xff0c;最好。太多了性能损耗较大&a…

QT实现的一个MVP设计模式demo

最近做qt 项目,发现网上基于MVP设计模式的QT例程很少&#xff0c;这里写一个demo示例可作为参考&#xff1a; 一、简要概述 MVP是由MVC发展而来&#xff0c;总体目的与作用相同。都是为了软件构架有层次之分&#xff0c;使得核心逻辑、界面控制、数据这三者分层清晰明了。减少…

RabbitMQ 死信队列

在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实际是将死信发送给了死信交换机&#xf…

QtC++与QLineEdit详解

介绍 QLineEdit 是 Qt 中的文本输入控件&#xff0c;用于在用户界面中接收和显示文本输入。它是一个非常常见的小部件&#xff0c;用于各种应用程序&#xff0c;以下是对 QLineEdit 在 Qt 中的详细讲解和作用&#xff1a; 文本输入&#xff1a; QLineEdit 允许用户输入文本&am…

要在CentOS中安装Docker

Docker部署 在CentOS中安装Docker要在CentOS中安装Docker&#xff0c;请按照以下步骤进行操作&#xff1a;启动和校验常用命令查看容器启动容器 配置镜像加速 在CentOS中安装Docker 要在CentOS中安装Docker&#xff0c;请按照以下步骤进行操作&#xff1a; 首先&#xff0c;确…

apache-maven-3.6.3 安装配置教程

链接&#xff1a;https://pan.baidu.com/s/1RkMXipnvac9EKcZyUStfGQ?pwdl32m 提取码&#xff1a;l32m 1. 将 maven 压缩包解压至指定文件夹 2. 配置环境变量 &#xff08;1&#xff09;打开此电脑-> 鼠标右键选择属性->点击高级系统设置 &#xff08;2&#xff09;点…

软件测试简历这样写,一周能约七个面试

简历到底有多重要&#xff1f; 俗话说&#xff1a;“简历就是你能否进入一家公司的敲门砖”。面试官只有看到一份有质量的简历才会给你一个面试的机会。 很多人都会有这样的问题&#xff0c;为什么我投了那么多简历&#xff0c;都没有接到面试通知&#xff1f;也没有HR和我电…

“菊风Juphoon”邀您莅临11月22-24日CNF南京应急展消防展 | 展位号:115-1

公司简介 菊风依托互联网和电信网音视频融合技术积累&#xff0c;提供智能化的音视频统一通信产品及服务。面向应急管理、消防救援、智慧城市等多个领域&#xff0c;菊风推出适用于全网通的统一通信一体机、统一通信平台。 此外&#xff0c;菊风还提供视频能力平台&#xff0…