React之react-redux的使用

ops/2024/12/12 19:21:16/

前言

前面我们讲过了redux的配置及使用,下面我们看一下react-redux的是如何使用的, 首先我们先了解一下redux和react-redux的关系?

redux和react-redux的关系

redux是react中进行state状态管理的JS库(并不是react插件),一般是管理多个组件中共享数据状态。这个是和Vuex是一样的。

react-redux又是做什么的呢?React-Redux是Redux的官方React绑定库。它能够使你的React组件从Redux store中读取数据,并且向store分发actions以更新数据。说白了就是用于连接redux,它提供了connectProvider两个Api, 后面我们讲解它们的具体使用。

react-redux的使用

react-redux的安装

//尽量安装8.0以下的版本,因为我测试发现8.0以上的版本会报错,
// 无法使用connect的方法,提示hooks错误, Provider也无法使用
cnpm i react-redux@7.x  --save 

安装完以后查看一下package.json中的是否安装上以及安装的版本


image.png

在定义的件中使用
前面我已经定义好了redux的信息,配置了user和cart两个Reducer,我们定义一个组件看具体如何使用

  1. 首先我们现在index.js入口文件中,引入Provider,配置redux的store对象,包裹在根组件的最外层,用于数据传递,这个跟react的context状态树组件通信有点类似。
    index.js入口文件
//react依赖包导入,
import React from 'react';
import ReactDOM from "react-dom/client";//导入redux的store配置文件,里面已经配置好了store和action方法
import store from "./store";
//导入react-redux对象 用于分发数据
import { Provider } from "react-redux"
......//其他代码请自动忽略
//路由vuex的信息操作, 我已经配置好路由了,所以直接使用路由文件
import Routes from './router';
root.render(//包裹节点传递store对象,相当于全局变量<Provider store={store}><Routes /></Provider>
)
  1. redux的store配置,src/store/index.js文件中
import { createStore,combineReducers } from "redux";/*** 定义一个Reducer ,Reducer是一个方法,有两个参数* state 保存redux中的数据* action是方法在视图中通过dispatch调用,通过返回值修改state中数据* */
import cart from "./cart";
import user from "./user"
//可以合并多个模块actions
const Reducer = combineReducers({cart,user,
})
//创建存储对象并且抛出对象
const store = createStore(Reducer );
export default store;//抛出store对象的信息

user.js模块的简单内容如下

const user = (state, actions) => {//判断state是否存在,如果不存在返回默认值if (!state) {return {name: "张三",counter:18}}//修改数据的type类型if(actions.type==="SET_COUNT"){return {...state,counter: state.counter+1}}return state;
}
export default user;
  1. 定义一个user.js页面,配置组件和redux中数据映射关系,

这里面我们会用到connect方法,方法的代码格式如下所示

//最后面跟的是你自定义的组件的名字
connect(mapStateToProps,mapDispatchToProps)(YourComponent)

mapStateToProps 是一个纯函数,参数是state,也就是redux中的state数据 ,函数必须要有一个返回值,返回值就是映射到组件中的数据

const mapStateToProps = (state) =>{return {...state}
}

mapDispatchToProps 也是纯函数,参数是dispatch方法,用于调用action, return 返回可以调用的函数对象

import React, { useState } from 'react';
import { connect } from 'react-redux';
function Index(props) {console.log(props)return (<div><h3>用户页面 - {props.name} - {props.counter}</h3><button onClick={()=>props.setname()}>counter++</button></div>)
}//定义一个属性用于配置redux中state到 组件中的props的映射关系
const mapStateToProps = (state)=>{return {...state.user}
}
//映射到action的方法,修改state的数据
const mapDispatchToProps = (dispatch)=>{return {setname: ()=>{dispatch({type:"SET_COUNT"});}}
}
//connect配置连接组件,把数据映射到组件中去
Index = connect(mapStateToProps,mapDispatchToProps)(Index)
export default Index;
  1. 访问页面显示效果


    image.png
a1.gif
最后编辑于:2024-11-17 10:28:00


喜欢的朋友记得点赞、收藏、关注哦!!!


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

相关文章

图论【Lecode_HOT100】

文章目录 1.岛屿数量No.2002.腐烂的橘子No.9943.课程表No.2074.实现Trie&#xff08;前缀树&#xff09;No.208 1.岛屿数量No.200 class Solution {public int numIslands(char[][] grid) {if (grid null || grid.length 0) {return 0;}int numIslands 0;int rows grid.len…

Redis02 SpringBoot整合Redis

使用方式 1.创建boot项目引入Web(Spring Web)NoSQl(Spring Data Redis(AccessDriver)) 2.修改配置文件 spring:redis:host: 127.0.0.1port: 6379password: 123456lettuce:pool:max-active: 8 #最大连接max-idle: 8 #最大空闲连接min-idle: 0 #最小空闲连接max-wait: 1000ms #…

PT8M2103 触控 I/O 型 8-Bit MCU

1 产品概述 ● PT8M2103 是一款可多次编程(MTP)I/O 型8位 MCU&#xff0c;其包括 2K*16bit MTP ROM、256*8bit SRAM、PWM、Touch 等功能&#xff0c;具有高性能精简指令集、低工作电压、低功耗特性且完全集成触控按键功能。为各种触控按键的应用&#xff0c;提供了一种简单而又…

109.【C语言】数据结构之二叉树层序遍历

目录 1.知识回顾 2.代码实现 准备工作 LevelOrder函数 代码框架 关键代码 3.执行结果 1.知识回顾 层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章 截取的部分内容 定义:按层的方式遍历(,设n为树的深度,h1-->h2-->h3-->...-->hn) 以下面…

15.Java 网络编程(网络相关概念、InetAddress、NetworkInterface、TCP 网络通信、UDP 网络通信、超时中断)

一、网络相关概念 1、网络通信 网络通信指两台设备之间通过网络实现数据传输&#xff0c;将数据通过网络从一台设备传输到另一台设备 java.net 包下提供了一系列的类和接口用于完成网络通信 2、网络 两台以上设备通过一定物理设备连接构成网络&#xff0c;根据网络的覆盖范…

分布式系统架构1:共识算法Paxos

1.背景 今天开始更新分布式的文章&#xff0c;工作几年后还没系统的学习分布式的内容&#xff0c;趁着还有时间学习沉淀的时候多输出些文章 2.为什么需要分布式共识算法 思考&#xff1a;现在你有一份随时变动的数据&#xff0c;需要确保它正确存储在网络的几台不同机器上&a…

在Ubuntu相关Linux发⾏版操作系统上进行Java项目的简单部署

目录 1.apt 2.安装JDK 3.安装MySQL 4.部署 Web 项⽬到 Linux 1.apt apt(Advanced Packaging Tool), Linux软件包管理⼯具. ⽤于在Ubuntu、Debian和相关Linux发⾏版 上安装、更新、删除和管理deb软件包. ⼤多数apt命令必须以具有sudo权限的⽤户⾝份运⾏. apt常⽤命令 …

VirtIO实现原理之数据结构与数据传输演示(3)

接前一篇文章:VirtIO实现原理之数据结构与数据传输演示(2) 本文内容参考: VirtIO实现原理——vring数据结构-CSDN博客 VirtIO实现原理——数据传输演示-CSDN博客 特此致谢! 一、数据结构总览 2. 相关数据结构 前文书介绍了《Virtual I/O Device (VIRTIO) Versi