当前位置: 首页 > news >正文

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.lqws.cn/news/443935.html

相关文章:

  • 使用springboot实现过滤敏感词功能
  • c++ STL---vector使用
  • 6.19_JAVA_微服务
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • 煤矿井下Modbus转Profibus网关的传感器与PLC互联解决方案
  • 基于keepalived、vip实现高可用nginx (centos)
  • TensorFlow+CNN垃圾分类深度学习全流程实战教程
  • 【目标检测】IOU的概念与Python实例解析
  • Qt蓝图式技能编辑器状态机模块设计与实现
  • Datawhale 网络爬虫技术入门第2次笔记
  • CD45.【C++ Dev】STL库的list的使用
  • redis02
  • 什么是Spark
  • 【Dify 沙箱网络问题排查与解决】
  • 亚马逊云科技中国峰会召开 解码Agentic AI时代企业加速创新路径
  • Codeforces Round 1032 (Div. 3)
  • Netty实战:从核心组件到多协议实现(超详细注释,udp,tcp,websocket,http完整demo)
  • (17)-java+ selenium->自动化测试-元素定位大法之By css上
  • openKylin高校沙龙 | 走进成都高校,推动开源技术交流与人才培养
  • ollama优化小贴士
  • flex布局 项目属性
  • 5_STM32F103ZET6系统启动过程
  • windows11 + ubuntu2204双系统+ros2 humble安装
  • IT小白到高手:HCIA、HCIP、HCIE认证攻略
  • (哈希)128. 最长连续序列
  • 嵌入式Web服务实战:OpenWRT+内网穿透实现物联网设备公网访问全攻略
  • ‘conda‘ 不是内部或外部命令,也不是可运行的程序或批处理文件?
  • FPGA基础 -- Verilog 系统任务与系统函数
  • 嘉立创EDA学习笔记4
  • 集合的处理:JDK和Guava孰强孰弱?