redux以及react-redux

         1.redux案例完整版

        上一篇文章我们是没有action文件,直接在countre组件与store以及reducer直接进行状态的改变以及展示。

        下面我们加上action文件,我们就不能直接通过dispatch传,而是通过调用action里面的函数讲我们传入的参数变成action这种对象形式然后dispatch传递给store。

        

        data是我们传入的参数,返回值是action对象的形式。这里我们一直写type可能会拼错,我们也可以定义一个常量文件,去给type重新定义一个常量保存,比如全大写,这样保证不会拼错。

        这是是引入的store之后,store.dispatch(createIncrementAction(value*1))这种里面是通过action函数变为action格式,然后外面dispatch直接扔到store,然后store调用的reducer开始按照里面的action加工状态。状态被改变之后通过store.getState()直接获取状态展示到页面上。

       现在我们正式开始react-redux。

   2.react-redux

                

        这里是react-redux的流程图,相当于封装了redux,让我们更加直观的用react-redux库来更好的使用redux。

        现在我们先实现容器组件和ui组件的连接。

        

        先创造容器组件Count在container文件夹,里面引入我们的react-redux库里面的connect,以及子组件Count,然后连接起来暴露Count组件。我们通过react-redux的connect方法,connect()()第二个括号是我们要连接的ui组件,第一个括号是我们给ui组件传递的props。

        

        然后我们容器组件在App组件之中引入并且渲染,然后传入store方法。通过props。

        这里的子组件只是于容器组件进行传输数据,不和redux有任何关系,所以store的一切删除掉。

        现在我们完成了连接子组件和容器组件,并且给容器组件传了store。

  3.react-redux的基本使用

        我们通过props在App组件调用Count组件的时候传了store。

        现在我们在控制台看组件的关系。

        

        Count组件是容器组件Count的子组件。所以props传递就说的通了。

        

        但是我们在括号里面连接的子组件,我们应该怎么去传props呢?connect的第一个括号。

        这里封装好的方法是connect里面的参数是函数,我们通过函数的返回值来传,如下图,注意返回值和props接收的格式都是key:value组合,一共有2个函数参数,第一个返回的是redux保存的状态,第二个返回的是操作状态的方法。

        

         这里第一个函数参数是封装的react-redux自动给我们执行store.getstate()放这里下面的dispatch同理。然后我们在这里设置了状态以及方法,都是key value的写法。我们传props给子组件

         我们在第一个函数返回的参数中返回的是一个对象,值是state,当前我们的state只有一个是数字0,所以直接这样给count这个key赋值就可以了,第二个函数,是传递的方法,比如当我们调用jia的时候,我们传一个参数value,然后通过createIncrementType生成对应的加的action,然后dispatch发送给store,再给到reducer加工,然后前面的state更新,这样就实现了整个加的过程。

        

        传了参数就可以直接调用,调用之后会执行dispatch送里面的action到store连接的reducer加工。而且可以简写,把第二个函数props当成对象来写,这样也会自动识别,react-redux库会自动识别。

        

        这样很简洁,虽然可读性我认为不高。写成这种对象,keyvalue,只需要写成action,react-redux就可以帮我们dispatch,也就是react-redux帮我们识别如果是对象就直接dispatch。

        而且我们用了connect连接redux之后,不需要subscribe监听状态的变化。容器组件帮我们监听使用。也就是说用了react-redux库就自动帮我们监测状态变化去刷新页面。

        

        当我们用Count容器组件的时候我们需要传store,但是每次都需要传,如果有很多容器组件就很麻烦。这时候我们可以用react-redux的一个provider api。

        

        这样就可以自动给容器组件传入store。

        优化文件。这时候文件太多,我们可以直接把count ui组件直接写到容器组件里面,这样就可以很方便的去看了,也就是ui组件不需要暴露或者引入,直接写道容器组件就可以了。

        

        

        就把ui组件以及他的容器组件写到一起。

 4.react-redux案例实现,数据共享。

        我们上面的案例,只是走通了流程,我们在reducer里面初始化一个state,然后定义了加工的方法,在action里面定义了传参数改变成action对象的形式,用react-redux里面的connect帮我们调用store里面的api,store文件定义了一个srore。我们只是实现了操作reducer里面的state并且拿过来使用。我们是直接把初始化的0当作共享的状态了

        如果我们现在创建一个新组件person,person组件可以从redux拿到count组件当前的和的值,count组件可以拿到rudex里面存的person组件的关于人的数据

        首先就需要去创建person组件对应的action以及reducer文件,这里我们需要创建文件夹专门存放action以及reducer。

        

       

        这里我们Person对应的reducer和action写好了。

        但是现在我们有两个reducer,那么我们的store就需要改一改了。

        

        这里用到的api是固定格式,需要记住。合并2个reducer为一个对象,里面都是函数,这样rens就是person的reducer,he就是count的reducer,这时候注意thunk,因为我们的store不能接受函数,只能接受一般对象,这里的中间件applyMiddleware(thunk)帮我们执行函数拿到返回值是一个对象,就可以了。

        

        

        然后我们的person文件就可以去connect创造容器组件,以及连接ui组件之后,传过来我们在reducer初始化设置的数组对象,以及action文件中创建的生成对应type的action的函数,调用传入我们的对象参数就可以自动变成对应的action了,然后这里我们是简写,react-redux库会自动识别对象然后帮我们dispatch给store连接的reducer上加工,然后更新state。

        这样我们的共享状态流程就通了,只需要用解构赋值通过props调用通过解构拿过来的状态就可以了,展示出来就行了。

        流程是这样的,还是比较繁琐的,但是代码并不难,需要去多练习。

        

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

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

相关文章

idea中配置svn及提交提示“未检测到更改”提示

首先要安装TortoiseSVN,选command line client tools; 在idea中,文件->设置->Subversion->如下图 文件->设置->目录映射->如下图 初次导入到svn, 输入服务器上的svn地址,等待成功即可;…

vue 实现dot-dropdown

<template><div class"app-container"><div class"mt30"></div><el-row :gutter"20"><!-- title --><!-- <div class"modt-box">导航管理</div> --><el-col :span"2&q…

使用 mysql2/promise 模块返回以后,使用 await 返回数据总结

SELECT 返回结构 const [rows, fields] await db.query(SELECT * FROM folders);返回&#xff1a; rows: 是一个数组&#xff0c;包含所有查到的记录。fields: 是字段的结构定义&#xff08;列信息&#xff09;&#xff0c;一般不用。 rows 是一个数组&#xff0c;包含所有…

Manus Metagloves pro高精度+无漂移+低延迟 ,重构VR/XR手部交互方式

manus metagloves pro是一款专为动画制作、虚拟现实及游戏开发打造的高精度无线动作捕捉手套。采用先进的Quantum追踪技术&#xff0c;实现毫米级动作捕捉&#xff0c;精准还原手指细节&#xff0c;显著提升创作效率与交互真实感。 MANUS Metagloves Pro解锁动捕 / 机器人 / XR…

Uniapp插件改造指南:如何让vue-plugin支持HarmonyOS5原生能力?

一、分层架构设计 采用通用逻辑与平台实现分离的三层结构&#xff1a; uni-plugin-harmony ├── common # 跨平台通用层 │ ├── interfaces # 能力接口抽象&#xff08;如Scanner.ets&#xff09; │ └── utils # 工具类 ├── harmony …

P1040 [NOIP 2003 提高组] 加分二叉树 题解

题目描述 设一个 n n n 个节点的二叉树 tree \text{tree} tree 的中序遍历为 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n)&#xff0c;每个节点都有一个分数&#xff08;均为正整数&#xff09;。任一棵子树 subtree \text{subtree} subtree&#xff08;包含 tr…

【Golang面试题】Data Race 问题怎么检测?

Go Race Detector 深度指南&#xff1a;原理、用法与实战技巧 一、什么是数据竞争&#xff1f; 在并发编程中&#xff0c;数据竞争发生在两个或多个 goroutine 同时访问同一内存位置&#xff0c;且至少有一个是写操作时。这种竞争会导致不可预测的行为和极其难以调试的问题。…

257. 二叉树的所有路径(js)

257. 二叉树的所有路径——DFS 回溯&#xff08;js&#xff09; 题目描述解题思路完整代码时间复杂度分析 题目描述 257. 二叉树的所有路径 解题思路 题意理解 给定一棵二叉树&#xff0c;要求返回所有从根节点到叶子节点的路径&#xff0c;路径以字符串形式表示&#xff0c…

自动化文档生成工具(亲测可运行)

本文介绍了一个用Java编写的自动化文档生成工具&#xff0c;通过读取开发清单文本自动生成格式规范的Word文档。该工具的主要特点包括&#xff1a; 采用Apache POI库处理Word文档&#xff0c;支持多级标题和段落自动生成实现中文数字转换功能&#xff0c;将编号转换为"一、…

湖北理元理律师事务所债务优化模型:法律与生活的平衡之道

在债务重组领域&#xff0c;专业机构需同时解决两个矛盾&#xff1a;法律合规性与债务人可持续生存能力。湖北理元理律师事务所通过“三维干预模型”&#xff0c;在武汉某餐饮连锁企业债务危机中验证了该方案的有效性。 一、法律底层设计&#xff1a;还款方案的合法性审查 以该…

Web3-代币ERC20/ERC721以及合约安全溢出和下溢的研究

Web3-代币ERC20/ERC721以及合约安全溢出和下溢的研究 以太坊上的代币 如果你对以太坊的世界有一些了解&#xff0c;你很可能听人们聊过代币— ERC20代币 一个 代币 在以太坊基本上就是一个遵循一些共同规则的智能合约——即它实现了所有其他代币合约共享的一组标准函数&…

论文笔记 <交通灯><多智能体>MetaLight:基于价值的元强化学习用于交通信号控制

今天看的论文是这篇MetaLight:基于价值的元强化学习用于交通信号控制 里面提到的创新点就是MetaLight框架&#xff1a;他目标是让交通信号控制智能体&#xff08;Agent&#xff09;在新路口&#xff08;即使结构或流量模式不同&#xff09;上能​​快速学习​​&#xff08;Few…

华为OD-2024年E卷-寻找符合要求的最长子串[200分] -- python

问题描述&#xff1a; 给定一个字符串s&#xff0c;找出这样一个子串: 1)该子串中的任意一个字符最多出现2次; 2)该子串不包含指定某个字符; 请你找出满足该条件的最长子串的长度。 输入描述 第一行为要求不包含的指定字符&#xff0c;为单个字符&#xff0c;取值范围[0-9a-zA…

CppCon 2016 学习:What C++ Programmers Need to Know about Header <random>

随机数生成的历史背景 Middle-Square 方法&#xff08;中位平方法&#xff09;&#xff1a; 已知最早的随机算法之一或由修道士 Brother Edvin 在 1245 年发明由 John von Neumann 在 1949 年重新发现缺点明显&#xff0c;但执行速度快 Monte Carlo 方法&#xff1a; 起初是…

Origin:误差棒点线图绘制

1.首先将你的数据复制到表格 2.选中B(y)列数据&#xff0c;依次点击图示选项 3.选中图中红框数据&#xff0c;点击绘制点线图即可 4.结果展示

Spring 源码学习 1:ApplicationContext

Spring 源码学习 1&#xff1a;ApplicationContext Bean 定义和 Bean 实例 AnnotationConfigApplicationContext 首先&#xff0c;创建一个最简单的 Spring Boot 应用。 在入口类中接收SpringApplication.run的返回值&#xff1a; SpringBootApplication public class Dem…

CppCon 2017 学习:Design Patterns for Low-Level Real-Time Rendering

这段内容讲的是离散显卡&#xff08;Discrete GPU&#xff09;中的内存管理模型&#xff0c;重点是CPU和GPU各自独立管理自己的物理内存&#xff0c;以及它们如何通过虚拟内存和DMA引擎实现高效通信。以下是详细的理解和梳理&#xff1a; 1. 基本概念 CPU 和 GPU 是两个独立的…

【单调队列】-----【原理+模版】

单调队列 一、什么是单调队列&#xff1f; 单调队列是一种在滑动窗口或区间查询中维护候选元素单调性的数据结构&#xff0c;通常用于解决“滑动窗口最大值/最小值”等问题。 核心思想是&#xff1a;利用双端队列&#xff08;deque&#xff09;维护当前窗口内或候选范围内元素…

CSS语法中的选择器与属性详解

CSS:层叠样式表&#xff0c;Cascading Style Sheets 层叠样式表 内容和样式分离解耦&#xff0c;便于修改样式。 特殊说明&#xff1a; 最后一条声明可以没有分号&#xff0c;但是为了以后修改方便&#xff0c;一般也加上分号为了使用样式更加容易阅读&#xff0c;可以将每条代…

模拟设计的软件工程项目

考核题目 论文论述题&#xff1a;结合你 参与开发、调研或模拟设计的软件工程项目 &#xff0c;撰写一篇论文 完成以下任务&#xff0c;论文题目为《面向微服务架构的软件系统设计与建模分析》&#xff0c;总分&#xff1a; 100 分。 1. 考核内容&#xff1a; 一、系统论述…