首页 > 其他分享 >Redux-详解-解开谜底

Redux-详解-解开谜底

时间:2022-12-07 04:55:05浏览次数:39  
标签:谜底 reducer dispatch state 详解 action Redux store

Redux-详解-解开谜底

  • 类似于vuex是一个全局状态树(跨组件通信),让组件通信的时候会变得极其方便。
  • 作用:集中式管理 react 应用中多个组件共享的状态

Redux的设计理念

  1. 组件可以派发( dispatch)行为( action)去修改state,然后为这些actions编写reducers来修改state。整个 state 转化是在 reducers 中完成
  2. state发生变化,然后通知订阅该state的组件,去更新自己的视图

Redux遵循的三个原则

  1. 单一事实来源:整个应用的 state都被存储到一个状态树里面,并且这个状态树只存在于唯一的 store中。
  2. 状态是只读的:state是只读的,唯一改变 state的方法就是触发 action。store.dispatch(action)
  3. 状态改变只能通过纯函数来执行:为了实现根据 action 修改 state值,我们就需要编写 Reducer。它是一个纯函数,接收先前的 state 和 action 返回新的 state 。

Redux的重要构成

1.Store

  • 在 redux 里面,只有一个Store,整个应用需要管理的数据都在这个Store里面。

  • redux提供了一个createStore来创建store

  • // 1. 引入redux
    // 2. createStore(reducer)
    import { createStore } from "redux";
    const store = createStore(reducer);
    
    export default store
    

2.action

  • 这个 action 指的是视图层发起的一个操作,告诉Store 我们需要改变。

  • 每个 action 必须有一个 type 属性,这表示 action 的名称。

  • const add = ()=> {
      return {
        type: "add",
        data: { val: 666}
      }
    }
    
  • 上边函数返回的就是一个 Action,它是一个包含 type 和 data 的对象.

  • Action 的作用就是告诉状态管理器需要做什么样的操作

  • 正如上边的栗子,就是要添加一条信息,这样就定义了一个Action,而 data 就是你做这个操作需要的数据。

3.Reducer

  • 这是一个确定状态将如何变化,以及更新状态的地方

  • Reducer 是一个纯函数,接受 旧 state 和 action,根据不同的 Action 做出不同的操作,并返回新的 state 。即:(state, action) => state

  • 在上面我们定义了一个Action,但是Action不会自己主动发出变更操作到Store,所以这里我们需要一个叫dispatch的东西,它专门用来发出action

  • store.dispatch 通知

  • <button onClick={()=> {
      store.dispatch(add())
    }}></button>
    
  • 当 dispatch 发起了一个 action 之后,会到达 reducer,那么这个 reducer 用来干什么呢?顾名思义,这个reducer就是用来计算新的store的,reducer接收两个参数:当前的state和接收到的action,然后它经过计算,会返回一个新的state。(前面我们已经说过了,不能直接更改state,必须通过返回一个新的state来进行变更。)

  • const reducer = (prevState, action)=> {
      .... return newState
    }
    
  • 可以看到,我们在创建store的时候,我们在createStore里面传入了一个reducer参数,在这里,我们就是为了,每次store.dispatch发送一个新的action,redux都会自动调用reducer,返回新的state

api

  1. store.subscribe(listener) 订阅: 监听变化,当 state 发生变化时,就可以在这个函数的回调中监听。当Redux状态变化时,强制更新render,让页面进行渲染
  2. store.dispatch(action) 通知: 向redux中发送 action对象 通知改变
  3. store.getState 访问redux的状态

Redux的工作流程

![image-20221207013123701](/Users/mos/Library/Application Support/typora-user-images/image-20221207013123701.png)

标签:谜底,reducer,dispatch,state,详解,action,Redux,store
From: https://www.cnblogs.com/bingquan1/p/16961971.html

相关文章

  • jdk7 HashMap resize 死循环过程详解
        java核心api中的HashMap,resize有死循环的风险,这是大家都知道的。具体过程是啥呢?本篇章具体讲一讲。本讲解文章,建立在大家大致明白HashMap基本原理的基础上。......
  • Sql Server的存储过程详解
    原文链接https://www.cnblogs.com/yifeixue/p/16441973.html一:存储过程概述1.1存储过程的概念存储过程(StoredProcedure)是预编译SQL语句集合,这些语句存储在一个名称(存储......
  • Day33:String类及其常用方法详解
    String类1.1String类概述Java中字符串属于对象,String类用于创建和操作字符串。最简单的字符串创建:直接通过String创建Stringstr="工地佬";利用String构造器创建字......
  • MySQL 快速入门之DATE_FORMAT() 函数详解
    一:定义和用法DATE_FORMAT()函数用于以不同的格式显示日期/时间数据。语法DATE_FORMAT(date,format)date参数是合法的日期。format规定日期/时间的输出格式。可以......
  • 详解支持向量机-SVC真实数据案例:预测明天是否会下雨-建模与模型评估以及不同方向的调
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibilifromsklearn.svmimportSVCfromsklearn.model_selectionimpo......
  • mysql主从同步配置步骤详解
    1介绍主从同步使得数据可以从一个服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务......
  • Servlet_生命周期详解和Servlet_3.0注解配置
    Servlet_生命周期详解:1.被创建:执行init方法,只执行一次Servlet什么时候被创建?默认情况下,第一次被访问时,Servlet被创建可以配置执行Servlet的创建时机......
  • Postman数据驱动详解
    数据驱动(读取外部数据)相同的测试脚本使用不同的测试数据,数据的改变从而驱动自动化的执行,最终引起测试结果的改变步骤:1.执行单条接口用例,观察请求、响应格式。方便编写......
  • 详解redis网络IO模型
    前言"redis是单线程的"这句话我们耳熟能详。但它有一定的前提,redis整个服务不可能只用到一个线程完成所有工作,它还有持久化、key过期删除、集群管理等其它模块,redis会通......
  • Backbone 网络-ResNet v2 详解
    目录目录目录前言摘要1、介绍2、深度残差网络的分析3、OntheImportanceofIdentitySkipConnection4、OntheUsageofActivationFunctions4.1、ExperimentsonAc......