React学习day08-useReducer、useMemo、memo、useCallback、forwardRef、useInperativeHandle

15、useReducer

1)作用:用来管理相对复杂的状态数据,类似于useState
2)使用步骤(传递一般的参数)(在APP.js中):
①定义一个reducer函数,在函数中通过switch语句,实现不同action对应不同状态

②在组件中调用useReducer,并传入reducer函数和state的初始值

查看state初始值

③事件发生时,通过dispatch传递action对象

④效果

⑤传递自定义参数,实现更新

在reducer函数中新增

(这里是直接返回传的值)

在触发dispatch传参时,传递payload

效果:

16、useMemo(在计算性能消耗很大时使用)

(1)作用:在组件每次渲染的时候缓存计算结果

(2)语法:useMemo(()=>{},[依赖项])(只有依赖项变化时,执行函数)

(3)示例:

1)准备代码(以返回num1平方为例)

2)不使用useMemo,与变化无关的选项也会引起函数的执行

3)使用useMemo后

17、memo

(1)作用:允许组件在Props没有改变的情况下跳过渲染

(2)语法:memo(子组件)

(3)应用场景:在React组件的默认渲染机制中只要父组件重新渲染子组件也会重新渲染时使用。

(4)示例(以简单prop类型为例)

修改后(职业props发生变化时才会重新渲染):

(5)React.memo-props的比较机制(在使用memo缓存组件之后,React会对每一个prop使用Object.is比较新值和老值,返回true,表示没有变化,false,有变化)

1)prop是简单类型

有变化时

传入一个常量

2)prop是引用类型,以数组为例,即使新值和老值均是空数组,也会显示有变化(因为引用实际上是形成新的数组引用)(可以使用useMemo缓存解决)

即使每次传入的是相同的数组,仍会触发函数

解决方法:使用useMemo,利用空依赖,仅在组件渲染时执行一次

18、useCallback

(1)作用:在组件重新渲染时缓存函数(使用useCallback包裹函数之后,函数可以保证在App重新渲染时保持稳定)

(2)语法:useCallback(函数)

未使用(即使使用memo缓存了)

使用后

19、React的forwardRef(在父组件通过ref拿到子组件的元素)

(1)作用:使用ref暴露DOM节点给父节点

(2)语法:在父组件中使用useRef(),通过ref传参给子组件;在子组件中使用forwardRef将子组件的内容包裹起来,并设置参数

(3)示例

初始代码:

1)在父组件中使用useRef(),通过ref传参给子组件

2)在子组件中使用forwardRef将子组件的内容包裹起来,并设置参数

20、useInperativeHandle

(1)作用:通过ref保留子组件的方法

(2)语法:

1)父组件内:使用useRef声明,并通过ref传参,然后通过父组件的ref获取子组件的方法,绑定点击事件
2)子组件内:通过useRef与组件绑定,提供方法,暴露方法

(3)适用场景:父组件需要使用子组件的方法时(通过ref调用子组件的方法)

(4)示例

初始代码:

在子组件内:

通过useRef与组件绑定,提供focus方法,暴露方法

在父组件内

通过父组件的ref获取子组件的方法,绑定点击事件

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

技术美术百人计划 | 《4.4 抗锯齿》笔记

前言:文中补充的内容很多来自链接里的,建议看看链接的文章。 一、锯齿 (一) 什么是锯齿 在学习渲染的旅途中,你可能会时不时遇到模型边缘有锯齿的情况。这些锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。在下面的…

Mobile net V系列详解 理论+实战(1)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. MobileNet 模型架构3.0 卷积个人理解3.1 深度可分离卷积3.2 网络结构和训练3.3 宽度乘数:更细的模型 α3.4 分辨率乘数:降低表示的维度ρ 4. 实验4.1 模型选择4.2. 模型缩减超参数4.3. 细粒度识别4.4…

人力资源数据集分析(二)_随机森林与逻辑回归

数据入口:人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差:很少、频繁、不出差DailyRate日薪Department任职部门:研发部门、销售部门、人力资源部门Dista…

Linux 进程3

进程地址空间 CPU读取数据都需要地址,在计算机中所有东西都是一种数据,包括我们的进程。 这是一个进程空间示意图,操作系统通过task_struct结构体链表来管理每一个进程,结构体里面有一个指针指向操作系统为进程开辟的一段空间&am…

2-100 基于matlab的水果识别

基于matlab的水果识别。从面积特征、似圆形特征,颜色(rgb值和hsv值)特征对图像中的梨子、苹果、桃子、香蕉和菠萝进行特征提取,边缘检测识别,最后按照筛选出来的特征对水果进行识别。程序已调通,可直接运行。 下载源程序请点链接…

【CustomPainter】渐变圆环

说明 实现一个渐变圆环,起点位置为- π / 2。 效果 源码 GradientCircularPainter1 class GradientCircularPainter1 extends CustomPainter {final double progress;GradientCircularPainter1(this.progress);overridevoid paint(Canvas canvas, Size size) {c…

VCNet论文阅读笔记

VCNet论文阅读笔记 0、基本信息 信息细节英文题目VCNet and Functional Targeted Regularization For Learning Causal Effects of Continuous Treatments翻译VCNet和功能目标正则化用于学习连续处理的因果效应单位芝加哥大学年份2021论文链接[2103.07861] VCNet和功能定向正…

OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算用于角点检测的梯度矩阵的最小特征值。 该函数类似于 cornerEigenValsAndVecs,但它计算并存储协方差矩阵导数的最小特征值&…

2024上海工博会,正运动激光振镜运动控制器应用预览(二)

■展会名称: 第二十四届中国国际工业博览会(以下简称“上海工博会”) ■展会日期 2024年9月24日–28日 ■展馆地点 中国国家会展中心(上海) ■展位号 6.1H-E261 正运动激光加工控制解决方案主要分为激光振镜运动…

24 小时不关机的挂机云电脑,还能这么玩?

云电脑技术为我们提供了无限可能。特别是对于游戏爱好者,挂机云电脑不仅解决了传统电脑的局限性,还带来了更为便利的游戏体验。除此之外云电脑还有什么其他玩法呢? 01 挂机云电脑的优势 首先要知道,什么是挂机云电脑&#xff1f…

解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!

文章目录 解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!背景:为何选择KeymouseGo?KeymouseGo简介安装KeymouseGo简单函数使用应用场景常见问题与解决方案总结 解锁自动化新境界:KeymouseGo,…

操作系统 | 学习笔记 | | 王道 | 5.1 I/O管理概述

5.1 I/O管理概述 5.1.1 I/O设备 注:块设备可以寻址,但是字符设备是不可寻址的 I/O设备是将数据输入到计算机中,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件; 设备的分类 按使用特性分类&#xff…

from tqdm.auto import tqdm用法详细介绍

tqdm 是一个 Python 库,用于在长时间运行的任务中显示进度条。tqdm.auto 是 tqdm 的一个版本,能够自动适配输出环境(如 Jupyter Notebook、命令行等),以确保进度条在各种环境下显示正确。下面是 tqdm.auto 的详细用法介…

英飞凌 PSoC6 评估板 RT-Thread 开发环境搭建

本文介绍如何搭建基于 RT-Thread Studio IDE 工具的 PSoC6 RTT 评估板的开发环境,通过搭建一个简单的工程,将代码编译、下载到 PSoC6 RTT 开发板。 安装软件包 首先需要安装 RT-Thread Studio,如果你还没安装,可以点击这里下载安…

MySQL 中的 UTF-8 与 UTF8MB4:差异解析

在 MySQL 数据库中,字符集的选择对于数据的存储和处理至关重要。其中,UTF-8 和 UTF8MB4 是两个常见的字符集选项。那么,它们之间到底有什么区别呢? 一、字符集简介 UTF-8 UTF-8(8-bit Unicode Transformation Format&…

中伟视界:AI边端云一体化管控平台的特色功能介绍及其工作原理

在当前的数字化浪潮中,人工智能(AI)与物联网(IoT)技术逐渐渗透到各行各业,而如何在复杂、多层次的技术环境中高效管理和控制这些系统,成为了企业追求自动化、智能化发展的关键挑战。为了满足这种…

docker-compose up 报错:KeyError: ‘ContainerConfig‘

使用命令查看所有容器: docker ps -a 找到有异常的容器删除 docker rm {容器id} 后续发现还是会出现这种情况,尝试使用更高版本的docker-compose后解决

Java开发-面试题-0035-Spring代理方式有哪些

Java开发-面试题-0035-Spring代理方式有哪些 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note (技术)微信公众号:CodeZeng1998 (生活&…

【Python报错已解决】SyntaxError invalid syntax

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

怎么解除BitLocker对磁盘的加密?

BitLocker是一种Windows操作系统内置的加密功能,用于保护用户的数据安全。它通过对整个磁盘进行加密,防止数据被未经授权的用户访问。BitLocker主要用于保护笔记本电脑和台式机中的重要数据,尤其是在设备丢失或被盗的情况下。怎么解除BitLock…