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

【前端知识】React 基础巩固(三十一)——Redux的简介

React 基础巩固(三十一)——Redux

一、Redux是个纯函数

  1. 概念

纯函数(确定的输入一定产生确定的输出,函数在执行过程中不产生副作用):

  • 在程序设计中,若一个函数符合以下条件,那么这个函数就被称为纯函数
  • 此函数在相同的输入值时,需产生相同的输出
  • 函数的输出和输入值以外的其他隐藏信息或状态无关,也和由I/O设备产生的外部输出无关
  • 函数不能有语义上可观察的函数副作用,诸如“触发事件”,使输出设备输出或更改输出值以外物件的内容

副作用:本身是医学概念,在计算机科学中,表示在执行一个函数时,除了返回函数值外,还对调用函数产生了附加的影响。例如,修改了全局变量,修改参数或改变外部的存储。

  1. 作用
  • 可以放心的编写和使用
  • 保证函数的纯度,只需关心相应的业务逻辑,无需关心传入的内容是如何获得的或者依赖其他的外部变量是否已经发生了修改
  • 确定输入内容不会被任意篡改,有确定的输入,有确定的输出。

二、为什么需要Redux

  1. 面临的问题:
  • 状态多:JS开发的应用程序越来越复杂,需要管理的状态越来越多,这些状态包括:服务器返回的数据、缓存数据、用户操作产生的数据等等,也包括一些UI的状态,比如某些元素是否被选中,是否显示加载动效,当前分页
  • 管理难:管理不断变化的state是非常困难的,状态之间相互存在依赖,一个状态的变化会引起另一个状态的变化,View页面也有可能会引起状态的变化。随着应用程序越来越复杂,state的变化变得难以控制和追踪
  • 靠自己:React是在视图层帮助我们解决了DOM的渲染过程,但是State依然留给我们自己来管理。无论是组件定义的state,组件之间的通信,还是通过Context进行的数据共享,这些维护的工作最终由我们自己来决定,而非React。
  1. Redux的出现,能帮助我们管理State,Redux是JS的状态容器,提供了可预测的状态管理,Redux除了和React配合使用外,也可以和Vue等其他界面库一起使用。

三、Redux的核心理念

  1. Store

    定义统一的规范来存储数据

    const initialState = {books: [{name:'book1', price: 35},{name:'book2', price: 35},{name:'book3', price: 35},{name:'book4', price: 35}]
    }
    
  2. action

    Redux要求必须通过action来更新数据。action是一个普通JS对象,用来描述此次更新的type和content,所有数据的变化必须通过派发action来更新。

    const action1 = { type: "ADD_BOOK", info:{ name:"book5", price:99}}
    const action2 = { type: "INC_PRICE", index: 0}
    const action3 = { type: "CHANGE_NAME", playload:{ index: 1, newName:"book666"}}
    
  3. reducer

    reducer是一个纯函数,将传入的state和action结合起来生成一个新的state。

  • store/index.js
const { createStore } = require("redux");// 初始化数据
const initialState = {name: "test",title: "hello redux",
};// 定义reducer函数:纯函数
// 两个参数:
// 1.store中上一次的值;
// 2.本次需要更新的action
// 返回值:它的返回值会作为sto re之后存储的state
function reducer(state = initialState, action) {console.log("reducer:", state, action);// 有新数据进行更新的时候,那么返回一个新的stateif (action.type === "change_name") {return {...state,name: action.name,};} // 若没有新数据更新,返回之前的statereturn state;
}// 创建的store
const store = createStore(reducer);module.exports = store;
  • test.js
const store = require("./store");console.log(store.getState());// 使用action修改store中的数据
const nameAction = {type: "change_name",name: "change name test",
};
store.dispatch(nameAction);console.log(store.getState());const nameAction2 = {type: "change_name",name: "change name test111",
};
store.dispatch(nameAction2);console.log(store.getState());
http://www.lryc.cn/news/96950.html

相关文章:

  • 拦截Bean使用之前各个时机的Spring组件
  • RT thread 之 Nand flash 读写过程分析
  • 独立站最全出单营销指南,新手卖家赶紧学起来吧!
  • Git移除commit过的大文件
  • 再见 Spring Boot 1.X ,Spring Boot 2.X 走向舞台中心
  • Jsonp劫持
  • STM32CubeIDE(串口)
  • Python编程很简单,四步菜鸟到高手(文末送书5本)
  • Labview串口通信MSComm实现串口收发
  • 字节跳动 EB 级 Iceberg 数据湖的机器学习应用与优化
  • CentOS 安装Mysql8
  • 3-Linux实操
  • Yarn 集群的架构和工作原理
  • PostgreSQL-视图-03-查询对象依赖关系视图-dba_dependencies
  • Vue style中的 scoped 属性
  • 移动端适配rem
  • Go语言开发小技巧易错点100例(八)
  • 100个网络安全测试面试题
  • 7.26 作业 QT
  • Python - Opencv应用实例之树叶自动分割、标签及统计分析系统
  • IC设计工程师,参加IC面试应该注意哪些细节?
  • java poi导入Excel、导出excel
  • 【算法与数据结构】101、LeetCode对称二叉树
  • 【N32L40X】学习笔记04-gpio中断库
  • Godot 4 着色器 - Shader调试
  • liunx时间慢几分钟,定时更新系统时间
  • C# 委托详解
  • chatGPT 学习分享:内含PPT分享下载
  • 使用CRM进行数据分析的四大好处
  • Excel“牛人”变现方案参考