React之react-redux的使用

前言

前面我们讲过了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>
    )

  2. 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
© 著作权归作者所有,转载或内容合作请联系作者

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

相关推荐
optimistic_chen14 分钟前
【Java EE进阶 --- SpringBoot】Mybatis - plus 操作数据库
数据库·spring boot·笔记·java-ee·mybatis·mybatis-plus
唐僧洗头爱飘柔952722 分钟前
【SpringCloud(6)】Gateway路由网关;zuul路由;gateway实现原理和架构概念;gateway工作流程;静态转发配置
spring·spring cloud·架构·gateway·请求转发·服务降级·服务雪崩
来旺1 小时前
互联网大厂Java面试全解析及三轮问答专项
java·数据库·spring boot·安全·缓存·微服务·面试
摇滚侠1 小时前
Spring Boot 3零基础教程,yml文件中配置和类的属性绑定,笔记15
spring boot·redis·笔记
thginWalker1 小时前
使用Spring Boot构建消息通信层
spring boot
lang201509281 小时前
Spring Boot 外部化配置最佳实践指南
java·spring boot
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 HTTP 缓存机制 笔记29
spring boot·笔记·缓存
Knight_AL2 小时前
Spring Boot 中使用自定义注解和 AOP 实现微服务日志记录(包含 URL、状态码和耗时信息)
linux·spring boot·微服务
Q_Q19632884752 小时前
python+vue的在线租房 房屋租赁系统
开发语言·vue.js·spring boot·python·django·flask·node.js
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商 接口返回 YAML 格式的数据 笔记35
spring boot·笔记·后端