React学习计划-React16--React基础(七)redux使用与介绍

笔记gitee地址

一、redux是什么

  1. redux是一个专门用于做状态管理js库(不是react插件库)
  2. 它可以用在reactangularvue的项目中,但基本与react配合使用
  3. 作用:集中式管理react应用中多个组件共享的状态

二、什么情况下需要使用redux

  1. 某个组件的状态,需要让其他组件可以随时拿到(共享)
  2. 一个组件需要改变另一个组件的状态(通信)
  3. 总体原则:能不用就不用,如果不用比较吃力才考虑使用

三、redux 工作流程

在这里插入图片描述

四、redux的三个核心概念

  1. action

    1. 动作对象
    2. 包含2个属性
      • type: 标识属性,值为字符串,唯一,必要属性
      • data: 数据属性,值类型任意,可选类型
    3. 例子:{ type: 'increment', data: 1}
  2. reducer

    1. 用于初始化状态、加工状态
    2. 加工时,根据旧的stateaction,产生新的state的纯函数
  3. store

    1. state、action、reducer联系在一起的对象
    2. 如何得到此对象?
      1. import { createStore } from 'redux'
      2. import reducer from './reducer'
      3. const store = createStore(reducer)
    3. 此对象的功能?
      1. getState(): 得到state
      2. dispatch(action): 分发action,触发reducer调用,产生新的state
      3. subscript(listener): 注册监听,当产生了新的state时,自动调用

五、案例(先看一个求和案例纯react版,在根据Redux版去做对比)

0. 求和案例纯react

在这里插入图片描述

1. 求和案例_redux精简版

  1. 去除Count组件的自身状态
  2. src下建立:
  -redux
    -store.js
    -count_reducer.js
  1. store.js
    1. 引入redux中的createStore函数,创建一个store
    2. createStore调用时要传入一个为其服务的reducer
    3. 记得暴露store对象
  2. count_reducer.js
    1. reducer的本质是一个函数,接收: preState,action,返回加工后的状态
    2. reducer有两个作用,初始化状态、加工状态
    3. reducer被第一次调用时,是store自动触发的,
      传递的preStateundefined,传递的action{type:'@@redux/INITu ...'}
  3. index.js中检测store中状态的改变,一旦发生改变重新渲染<App/>

备注:redux只负责管理状态,至于状态的改变驱动页面的展示,要靠我们自己写

示例
1. 目录
在这里插入图片描述
2. store.js文件:该文件专门用于暴露一个store对象,整个应用只有一个store对象
在这里插入图片描述
3. count_reducer.js文件

  1. 该文件用于创建一个为Count组件服务的reducer,reducer的本质就是一个函数
  2. reducer函数会接收两个参数,分别为:之前的状态(preState),动作对象(action)

在这里插入图片描述
4. Count.jsx组件
在这里插入图片描述

2. 求和案例_redux完整版

新增文件:

  1. count_action.js 专门用于创建action对象
  2. constant.js 放置容易写错的type值,方便管理
    示例
    1. 目录
      在这里插入图片描述
    2. constant.js: 该模块是用于定义action对象中type类型的常量值
      在这里插入图片描述
    3. count_action.js:该文件专门为count组件生成action对象,目的只有一个:便于管理的同时防止程序员单词写错
      在这里插入图片描述
    4. count_reducer.js引用常量
      在这里插入图片描述
    5. Count.jsx组件:

    监测redux中状态的变化,只要变化,就调用render

    在这里插入图片描述
    6. index.js
    在这里插入图片描述

3. 求和案例_redux异步action版本

  1. 明确:延迟的动作不想交给组件自身,想交给action
  2. 何时需要异步action:想要对状态进行操作,但是具体的数据靠异步任务返回
  3. 具体编码:
    1. yarn add redux-thunk, 并配置在store
    2. 创建action的函数不再返回一般对象,而是一个函数,该函数中写异步任务
    3. 异步任务有结果后,分发一个同步action去真正操作数据
  4. 备注: 异步action不是必须要写的,完全可以自己等待异步任务的结果然后再去分发同步action
    示例
    1. count_action.js:
      在这里插入图片描述

    2. store.js引入三方库,用于支持异步操作
      在这里插入图片描述

    3. Count.jsx

       // 延时加
        incrementAsync = ()=>{
          const { value } = this.selectNumber
          // 不在组件内部做异步处理
          // setTimeout(()=>{
          //   store.dispatch(createIncrementAction(value * 1))
          // }, 500)
          // 直接调取redux的异步操作
          store.dispatch(createIncrementAsyncAction(value * 1, 500))
        }
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

antv/x6_2.0学习使用(三、内置节点和自定义节点)

内置节点和自定义节点 一、节点渲染方式 X6 是基于 SVG 的渲染引擎&#xff0c;可以使用不同的 SVG 元素渲染节点和边&#xff0c;非常适合节点内容比较简单的场景。面对复杂的节点&#xff0c; SVG 中有一个特殊的 foreignObject 元素&#xff0c;在该元素中可以内嵌任何 XH…

数据结构与算法笔记

数据结构&#xff1a; 就是指一组数据的存储结构 算法&#xff1a; 就是操作数据的一组方法 数据结构和算法 两者关系 数据结构和算法是相辅相成的。数据结构是为算法服务的&#xff0c;算法要作用在特定的数据结构之上。 数据结构是静态的&#xff0c;它只是组织数据的一…

Windows窗口程序详解

今天来给大家详细剖析一下Windows的消息机制 一、什么是消息机制 首先消息机制是Windows上面进程之间通信的一种方式&#xff0c;除此之外还包括共享内存&#xff0c;管道&#xff0c;socket等等进程之间的通信方式&#xff0c;当然socket还可以实现远程进程之间的通信&#…

JS变量和函数提升

JS变量和函数提升 JS变量提升编译阶段执行阶段相同变量或函数 变量提升带来的问题变量容易不被察觉的遭覆盖本应销毁的变量未被销毁 如何解决变量提升带来的问题 JS变量提升 sayHi()console.log(myname)var myname yyfunction sayHi() {console.log(Hi) }// 执行结果: // Hi …

我的2023年,平淡中寻找乐趣

文章目录 两个满意我学会了自由泳。学习英语 一个较满意写博客 2024的期望 2023年&#xff0c;我有两个满意&#xff0c;一个较满意。 两个满意 我学会了自由泳。 开始练习自由泳是从2023年3月份&#xff0c;我并没有请教练&#xff0c;而是自己摸索。在抖音上看自由泳的视频…

【一分钟】ThinkPHP v6.0 (poc-yaml-thinkphp-v6-file-write)环境复现及poc解析

写在前面 一分钟表示是非常短的文章&#xff0c;只会做简单的描述。旨在用较短的时间获取有用的信息 环境下载 官方环境下载器&#xff1a;https://getcomposer.org/Composer-Setup.exe 下载文档时可以设置代理&#xff0c;不然下载不上&#xff0c;你懂的 下载成功 cmd cd…

JavaWeb——前端之HTMLCSS

学习视频链接&#xff1a;https://www.bilibili.com/video/BV1m84y1w7Tb/?spm_id_from333.999.0.0 一、Web开发 1. 概述 能通过浏览器访问的网站 2. Web网站的开发模式——主流是前后端分离 二、前端Web开发 1. 初识 前端编写的代码通过浏览器进行解析和渲染得到我们看到…

Java多线程常见的成员方法(线程优先级,守护线程,礼让/插入线程)

目录 1.多线程常见的成员方法2.优先级相关的方法3.守护线程&#xff08;备胎线程&#xff09;4.其他线程 1.多线程常见的成员方法 ①如果没有给线程设置名字&#xff0c;线程是有默认名字 的&#xff1a;Thread-X(X序号&#xff0c;从0开始) ②如果要给线程设置名字&#xff0c…

【SAM系列】Auto-Prompting SAM for Mobile Friendly 3D Medical Image Segmentation

论文链接&#xff1a;https://arxiv.org/pdf/2308.14936.pdf 核心&#xff1a; finetune SAM,为了不依赖外部prompt&#xff0c;通过将深层的特征经过一个编-解码器来得到prompt embedding&#xff1b;finetune完之后做蒸馏

苯酚,市场预计将以5%左右的复合年增长率

苯酚是一种重要的化合物&#xff0c;用于广泛的工业应用&#xff0c;包括塑料、树脂和合成纤维的生产。在建筑、汽车和电子行业不断增长的需求推动下&#xff0c;苯酚市场在过去十年中经历了稳步增长。全球苯酚市场分析&#xff1a; 在 2021-2026 年的预测期内&#xff0c;全球…

Java并发编程(三)

并发编程的三个特性 并发编程的三个重要特性是原子性、可见性和有序性。 原子性&#xff1a;原子性指的是一个操作是不可中断的&#xff0c;要么全部执行成功&#xff0c;要么全部不执行&#xff0c;是不可再分割的最小操作单位。保证原子性可以避免多个线程同时对共享数据进行…

《深入理解计算机系统》学习笔记 - 第七课 - 机器级别的程序三

Lecture 07 Machine Level Programming III Procedures 机器级别的程序三 文章目录 Lecture 07 Machine Level Programming III Procedures 机器级别的程序三概述程序机制 栈结构栈说明栈定义推入数据弹出数据 调用控制代码示例程序控制流程%rip 传递数据ABI 标准示例 管理局部…

WPF Button使用漂亮 控件模板ControlTemplate 按钮使用控制模板实例及源代码 设计一个具有圆角边框、鼠标悬停时颜色变化的按钮模板

续前两篇模板文章 模板介绍1 模板介绍2 WPF中的Button控件默认样式简洁&#xff0c;但可以通过设置模板来实现更丰富的视觉效果和交互体验。按钮模板主要包括背景、边框、内容&#xff08;通常为文本或图像&#xff09;等元素。通过自定义模板&#xff0c;我们可以改…

JVM篇:JVM的简介

JVM简介 JVM全称为Java Virtual Machine&#xff0c;翻译过来就是java虚拟机&#xff0c;Java程序&#xff08;Java二进制字节码&#xff09;的运行环境 JVM的优点&#xff1a; Java最大的一个优点是&#xff0c;一次编写&#xff0c;到处运行。之所以能够实现这个功能就是依…

Docker自建私人云盘系统

Docker自建私人云盘系统。 有个人云盘需求的人&#xff0c;主要需求有这几类&#xff1a; 文件同步、分享需要。 照片、视频同步需要&#xff0c;尤其是全家人都是用的同步。 影视观看需要&#xff08;分为家庭内部、家庭外部&#xff09; 搭建个人网站/博客 云端OFFICE需…

TiDB在WMS物流系统的应用与实践 (转)

业务背景 北京科捷物流有限公司于2003年在北京正式成立,是ISO质量管理体系认证企业、国家AAAAA级物流企业、海关AEO高级认证企业,注册资金1亿元,是中国领先的大数据科技公司——神州控股的全资子公司。科捷物流融合B2B和B2C的客户需求,基于遍布全国的物流网络与自主知识产…

电话号码的字母组合[中等]

一、题目 给定一个仅包含数字2-9的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意1不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输出&am…

【MySQL学习笔记008】多表查询及案例实战

1、多表关系 概述&#xff1a;项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上可分为三种&a…

什么是 NLP (自然语言处理)

NLP&#xff08;自然语言处理&#xff09;到底是做什么&#xff1f; NLP 的全称是 Natural Language Processing&#xff0c;翻译成中文称作&#xff1a;自然语言处理。它是计算机和人工智能的一个重要领域。顾名思义&#xff0c;该领域研究如何处理自然语言。 自然语言就是我…

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

最新版2.6.7版下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况&#xff0c;错误提示无法打开该页面&#xff0c;不支持打开&#xff0c;这种问题其实就是权限问题&#xff0c;页面是通过调用web-v…