react基础之redux快速上手环境准备

在这里插入图片描述

文章目录

    • 核心概念
    • 配置基础环境
    • 提交action传参
    • 异步状态操作
    • redux调试-devtools
    • 配套工具


Redux 是一个状态管理库,通常与 React 一起使用,帮助开发者管理应用的全局状态。它的核心理念是将应用的状态存储在一个单一的、不可变的状态树中,并通过分发(dispatch)动作来更新状态。

核心概念

  1. Store
    存储应用的所有状态。应用中只有一个 Store,所有组件共享这个状态。

  2. Action
    一个描述发生什么的普通对象,通常包含一个 type 字段和可选的其他数据。比如:

    const ADD_TODO = {type: 'ADD_TODO',payload: { text: 'Learn Redux' }
    };
    
  3. Reducer
    纯函数,接受当前状态和动作,返回新的状态。Reducer 不应该修改原状态,而是返回一个新状态:

    function todosReducer(state = [], action) {switch (action.type) {case 'ADD_TODO':return [...state, action.payload];default:return state;}
    }
    
  4. Dispatch
    用于发送 Action 到 Store,触发状态更新。

  5. Selector
    用于从 Store 中获取特定的状态片段,便于在组件中使用。

配置基础环境

配置 Redux 的基础环境通常包括以下步骤:

  1. 安装依赖

首先,确保你已经安装了 Node.js 和 npm,然后在项目目录中运行:
使用CRA快速创建React项目

npx create-react-app react-redux

安装配套工具

npm install @reduxjs/toolkit react-redux


出现以下内容就是安装成功

启动项目

npm run start
  1. Store目录设计

注:自己创建文件就好

1.通常集中状态管理的部分都会单独创建一个单独的store目录

2.应用通常会有很多个子store模块,所以创建一个modules目录,在内部编写业务分类的子store

3.store中的入口文件 index.js 的作用是组合modules中所有的子模块,并导出store

  1. 在react中添加Store数据

counterStore.js内容

import {createSlice
} from '@reduxjs/toolkit'const counterStore = createSlice({name: 'counter',// 初始化stateinitialState: {count: 0},// 修改状态方法 同步方法 支持直接修改reducers: {increment(state) {state.count++},decrement(state) {state.count--},}})// 解构出来的actionCreater函数
const { increment, decrement } = counterStore.actions
// 获取reducer
const reducer=counterStore.reducer
// 按需导出的方法导出actionCreater
export {increment,decrement
}
//默认导出的方式导出reducer
export default reducer

在Store/index.js中添加

import { configureStore } from "@reduxjs/toolkit";
import combineReducers from './modules/counterStore'const store= configureStore({reducer: {counter: combineReducers}
})export default store

使用效果:
在src/index.js中添加

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';import store from './store';
import { Provider } from 'react-redux';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<React.StrictMode><Provider store={store}><App/></Provider></React.StrictMode>
);// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

在react组件中使用store的数据
用App.js举例

import { useSelector, useState } from 'react-redux';function App() {const { count } =useSelector((state) => state.counter);return (<div className="App">{count}</div>);
}export default App;

效果

  1. react组件修改store中的数据

在react组件修改store中的数据需要另外一个hook函数-useDispatch,主要作用是生成提交action对象的dispatch函数

在App.js中修改:

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

实现一个添加减少数据效果

添加效果

减少效果

提交action传参

在reducers的同步修改方法中添加action对象参数,在调用actionCreater的时候传递参数,参数会被传递到action对象payload属性上

用修改参数举例:
先在counterStore.js添加add

import {createSlice
} from '@reduxjs/toolkit'const counterStore = createSlice({name: 'counter',// 初始化stateinitialState: {count: 0},// 修改状态方法 同步方法 支持直接修改reducers: {increment(state) {state.count++},decrement(state) {state.count--},add(state, action) {state.count += action.payload}}})// 解构出来的actionCreater函数
const { increment, decrement,add } = counterStore.actions
// 获取reducer
const reducer=counterStore.reducer
// 按需导出的方法导出actionCreater
export {increment,decrement,add
}
//默认导出的方式导出reducer
export default reducer

然后在app.js添加修改按钮

<button onClick={() => dispatch(add(count+20))}>+20</button>

效果:

异步状态操作

redux调试-devtools

配套工具

  1. Redux Toolkit
  • 描述:Redux 官方推荐的工具集,用于简化 Redux 的使用。它提供了更简单的 API 来创建 Store、Reducer 和 Action,减少了样板代码。
  • 特点:支持“切片”概念、内置的异步处理和更好的开发体验。
  1. React-Redux
  • 描述:将 Redux 与 React 结合的官方库。
  • 特点:提供 Provider 组件和 connect 函数,简化组件与 Redux Store 的连接。

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

OAuth2.0 动态注册客户端

什么是 OAuth 2.0 客户端自动注册&#xff1f; OAuth 2.0 客户端注册通常是在授权服务器的管理界面或通过静态配置文件手动完成的。客户端自动注册是指应用在启动或运行过程中通过代码与 OAuth 2.0 授权服务器交互&#xff0c;自动注册并获取 client_id 和 client_secret 等必…

启纬科技发布6色无源电子纸手机壳InkaceE6

杭州启纬科技有限公司投稿:无源NFC技术的开创者和领导者,杭州启纬科技有限公司于北京时间2024年10月28号正式发布了面向iOS系统和安卓/鸿蒙系统的6色无源电子纸手机壳---InkaceE6系列产品及配套方案。 图1:手机壳高清图 图2:6色与3色、4色效果对比图,海边美女 启纬…

鸿蒙生态下开发挑战-鸿蒙低代码开发工具展望及优势

鸿蒙生态下开发挑战 在鸿蒙生态下开发时&#xff0c;开发者可能会遇到多方面的挑战&#xff0c;这些挑战主要涉及开发工具、技术难度、生态竞争以及市场定位等方面。以下是对这些挑战的详细分析&#xff1a; 一、开发工具不完善 尽管鸿蒙系统的开发工具DevEco Studio在逐步完…

CSS 超出一行省略号...,适用于纯数字、中英文

文本超出显示省略号... 代码&#xff1a; .ellipsis{ overflow: hidden; -webkit-line-clamp:1; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; word-break: break-all; /** 纯数字、中英文都适用 */ }

vscode markdown-image 图片粘贴自动上传到本地目录设置

.vscode/settings.json文件内容 {"markdown-image.base.fileNameFormat": "${hash}-${YY}${MM}${DD}-${HH}${mm}${ss}","markdown-image.local.path": "./images","markdown-image.base.uploadMethod": "Local",…

java设计模式之结构型模式(7种)

结构型模式 描述如何将类或者对象按某种布局组成更大的结构。它分为结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者通过组合或聚合来组合对象。 分为7种&#xff1a;代理模式、适配器模式、装饰者模式、桥接模式、外观模式、组合模式、…

Java序列化与反序列化

文章目录 一、Java序列化和反序列化1、序列化和反序列化的含义和用途序列化主要使用场景反序列化漏洞出现的原因 下一期 一、Java序列化和反序列化 1、序列化和反序列化的含义和用途 Java对象&#xff08;存在于内存&#xff09;———序列化——>>字符串/二进制流&…

Vue computed watch

computed watch watch current prev

基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)

&#x1f388;系统亮点&#xff1a;协同过滤算法、节流算法、支付宝沙盒支付、图形化分析、实时聊天&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk1…

GetX的一些高级API

目录 前言 一、一些常用的API 二、局部状态组件 1.可选的全局设置和手动配置 2.局部状态组件 1.ValueBuilder 1.特点 2.基本用法 2.ObxValue 1.特点 2.基本用法 前言 这篇文章主要讲解GetX的一些高级API和一些有用的小组件。 一、一些常用的API GetX提供了一些高级…

第三届北京国际水利科技博览会将于25年3月在国家会议中心召开

由中国农业节水和农村供水技术协会、北京水利学会、振威国际会展集团等单位联合主办的第三届北京国际水利科技博览会暨供水技术与设备展&#xff08;北京水利展&#xff09;将于2025年3月31日至4月2日在北京•国家会议中心举办&#xff01; 博览会以“新制造、新服务、新业态”…

基于SpringBoot的学生读书笔记共享的设计与实现

一、项目背景 计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。用户可以通过计算机上的浏览器访问多个应用系统&#xff0c;从中获取一些可以满足用户需求的管理系统。网站系统有时更像是一个大型“展示平台”&#xff0c;用户可以选择所需的信息进入系统查看…

org.springframework.boot:type=Admin,name=SpringApplication异常

org.springframework.boot:typeAdmin,nameSpringApplication异常 问题&#xff1a;更换最新版本idea之后&#xff0c;启动springboot项目报错 javax.management.InstanceNotFoundException: org.springframework.boot:typeAdmin,nameSpringApplication idea自动默认的启动设…

Netty核心源码与优化

1.Netty的优化 1.1 使用EventLoop的任务调度 直接使用 channel.writeAndFlush(data) 可能会导致线程切换&#xff0c;这是因为如果当前线程并不是该 Channel 所绑定的 EventLoop 线程&#xff0c;那么 writeAndFlush() 操作会将任务重新提交给关联的 EventLoop 线程执行&#…

CTF之web题集详情随手笔记

《Web安全》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484238&idx1&snca66551c31e37b8d726f151265fc9211&chksmc0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene21#wechat_redirect 1 WEB 1 靶场目…

使用Nginx作为反向代理和负载均衡器

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Nginx作为反向代理和负载均衡器 引言 Nginx 简介 安装 Nginx Ubuntu CentOS 配置 Nginx 作为反向代理 配置 Nginx 作为负载…

【PTA】图的邻接矩阵存储和遍历

图的邻接矩阵存储用一个一维数组存储各顶点数据元素&#xff0c;一个二维数组存储顶点之间的邻接关系。 如上面的无向加权图&#xff0c;顶点数据元素为“A-Z”之间的单个字符&#xff0c;为了使遍历输出结果唯一&#xff0c;要求顶点数据元素按由小到大(ASCII码)的顺序存储。…

数据结构之树

1.树的基本概念 1.树的定义 树是由n(n>0)个结点&#xff08;或元素&#xff09;组成的有限集合&#xff08;记为T&#xff09;。 如果n0,它是一棵空树&#xff0c;这是树的特例。 如果n>0&#xff0c;这个结点中有且仅有一个结点作为树的根结点&#xff0c;简称为根。…

国内PLC市场份额报告,西门子老大的地位从未动摇

【导读】国内PLC市场占有率&#xff0c;西门子依然是老大。 PLC市场集中度很高&#xff0c;从销售额来看&#xff0c;TOP3厂家占据一半以上的市场份额&#xff0c;以外资品牌为主&#xff0c;其中西门子排名第一&#xff0c;2022年市场份额约47.1%&#xff1b;三菱排名第二&…

计算机毕业设计 | 基于SpringBoot的健身房管理系统(附源码)

1&#xff0c;项目背景 随着人们生活水平的提高和健康意识的增强&#xff0c;健身行业逐渐兴起并迅速发展。而现代化的健身房管理系统已经成为健身房发展的必备工具之一。传统的健身房管理方式已经无法满足现代化健身房的需求&#xff0c;需要一种更加高效、智能、安全的管理系…