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

redux

1.redux是什么

        1.redux是一个用来做状态管理的js库

        2.可以用在react,vue等项目,但基本和react配合使用

        3.作用:集中式管理react应用中多个组件共享的状态

2.什么情况下需要用redux

        1.某个组件的状态,需要让其他组件随时拿到

        2.一个组件需要改变另一个组件的状态

        3.总体原则,能不用就不用,不用会毕竟吃力可以考虑使用。

        

        比如一个例子,我们希望B组件状态E组件要用,我们怎么去做到呢?

        1.b给app app给e 通过props

        2.消息订阅 E订阅 B发布

        如果D的状态所有的组件都要用,那么上面两种方法显然会非常麻烦。

        

        或者这种,D组件里面的a b所以的组件希望随时用,这时候就需要用redux了。

    3.redux工作流程

             那么redux是怎么实现这个共享效果呢。或者说我们怎么把组件的状态保存到redux,然后其他组件之间去操作改变状态。

                

                右下角我们通过这个简单的案例来实现。我们先来解析图片。

                

        action的创建者们 action? (在redux里面叫动作对象,包含本次动作的类型以及操作的数据)比如 + 2 在这里就是动作类型 + 操作的数据2.这里action只是一个对象,属性 type, data。

  

        分发(翻译)这里是函数,调用之后才会进行后面的步骤,也就是提交给后面的步骤。

这里创建出的action是给其他的地方用,dispatch (分发)传给后面的步骤

    

        存储,商店。 负责全局的掌控(在redux里面)。相当于交警,控制步骤进行。这里dispatch 把action给store 然后store(中枢)把action和初始state给reduces,真正加工的是reducers(加s说明有很多个)然后返回更新后的state(通过我们action操作)给store,然后组件用getState()得到新的state。

        整个流程跑通了,reducers是加工状态,谁初始化状态?,也就是这个流程是第二次进行的。reducers可以初始化状态。最多的是加工状态,只做一次初始化状态。此时的流程是加工逻辑,这没有初始化,previousstate是undefined,所以在初始化的时候previousstate是undefined 后面加工逻辑才有值。

        我们用例子来解释流程。

        去餐厅的客人,点了一盘蛋炒饭。

        服务员,记录蛋炒饭--一份

        点餐宝,输入类型type是点餐,data是一份蛋炒饭。

        老板拿到数据,给后厨数据data 一份蛋炒饭以及类型是点餐。初始数据现在没有是undefined

        后厨知道previous是undefined,然后做一份蛋炒饭,把stata从undefined变成一份蛋炒饭传给store,

        客人通过getState方法取餐。

   4.redux在案例的简单使用

           用redux实现案例之前,我们需要知道reducers以及store是怎么在引入redux库之后使用的。

        首先reduce是一个纯加工函数,store是一个createStore创建就好了,这两个js文件都需要在redux文件夹里面保存,然后在这个案例里面怎么书写呢。

        

        

        通过这两个js文件里面的代码编译后,我们成功搭建了redux中的store以及count组件对应的加工函数reducer。我们就可以在我们的组件中通过给store传参数,然后store传给reducer加工,给我们返回加工后的状态了。

        

   

        这是实现案例效果的代码,这里值得注意的点是,store里面有很多api,我们用getState()api之间可以获得reducer的返回值中的状态,至于我们传递action对象,直接通过store.dispatch({type:'',data:}),用key value的形式传过去。然后我们reducer就会自动匹配对应的type然后执行对应的+功能,这里的异步以及奇数,都需要我们在传递的时候定义,而reducer加工就只是负责加工就可以了。

        还有一个注意点,redux在调用api修改成功状态后并不会更新页面重新渲染,所以我们这时候虽然preState变了但是页面没有重新加载。

        我们这时候用类组件的声明周期componentDidMouunt(){this.setState({})} ,这里我们利用更新state方法会重新渲染页面。我们也可以用下面的方法。

           

        直接订阅来监听状态,如果改变就重新加载页面组件。这就是redux的简单使用方法,我们略过了action creators这一步,只是在组件和store以及reducer之间进行状态的传递以及更新。

        

相关文章:

  • chili3d笔记18 出三视图调整
  • 从零接入高德路径规划2.0:实现精准物流距离计算实战
  • 侧信道攻击的评估指标
  • SpringBoot电脑商城项目--新增收获地址
  • springboot入门之路(一)
  • 【AI Study】第四天,Pandas(3)- 数据处理进阶
  • Redission实现的分布式锁的可重入性
  • Linux驱动学习day5
  • 利用Java进行验证码的实现——算数验证码
  • vue | vue 插件化机制,全局注册 和 局部注册
  • docker|redis的面试题——七道
  • AppBarLayout+ CoordinatorLayout,ViewPager2为什么不会覆盖AppBarLayout
  • Saucer 页面嵌入使用举例
  • (LeetCode 每日一题) 2966. 划分数组并满足最大差限制 (贪心、排序)
  • 【java】@RestController和@Controller的区别
  • 【python 读取抖音/小红书/微博今日头条/百度热点等平台的热点新闻】
  • C++ Primer Plus 9.2.7 mutable
  • Windows11下搭建Raspberry Pi Pico编译环境
  • AutoHotkey 脚本生成器:一键打开网页到指定位置(v2版本:自定义位置)
  • C语言——枚举
  • 冠县网站建设/seo官网优化
  • 深圳专业网站设计专业定制/宁波网络推广团队
  • 做网站的技术理论/常见的网络营销方法有哪些
  • 吉林省四平市网站建设/网络销售推广是做什么的具体
  • wordpress搭建英文网站/推广赚钱app
  • 夺宝网站制作/中国十大电商平台排名