React Hooks概述及常用的React Hooks介绍

Hook可以让你在不编写class的情况下使用state以及其他React特性

useState

● useState就是一个Hook
● 通过在函数组件里调用它来给组件添加一些内部state,React会在重复渲染时保留这个state
纯函数组件没有状态,useState()用于设置和使用组件的状态属性。语法如下:

import React from './react';
import ReactDOM from './react-dom';
function Counter(){let [number1,setNumber1] = React.useState('Counter-number1');let handleClick = ()=>{debuggersetNumber1(number1+1);}return (<div><p>{number1}</p><button onClick={handleClick}>+</button></div>)
}
ReactDOM.render(
<Counter />
, document.getElementById('root'));

useCallback+useMemo

useCallback()为记忆函数,它可以防止因为组件重新渲染,导致方法被重新创建,起到缓存作用。
● 把内联回调函数及依赖项数组占座位参数传入(useCallback),他将返回该回调函数的memoized版本,该回调函数仅在某个依赖项改变时才会更新
● 把创建函数和依赖数组作为参数传入useMemo,它仅会在某个依赖项改变时才重新计算memoized值。这种优化有助于避免每次渲染时都进行高开销的计算

在这里插入图片描述

useReducer

● useState的替代方案。它接收一个形如(state,action)=>newState的reducer,并返回当前的state以及与其配套的dispatch方法
● 在某些场景下,useReducer会比useState更适用,例如state逻辑较复杂且包含多个子值,或下一个state依赖于之前的state等

在这里插入图片描述

useContext

接收一个context对象(React.createContext的返回值) 并返回该context的当前值
当前的context值由上层组件中距离当前组件最近的<MyContext.Provider>的value prop决定
当组件上层最近的<MyContext.Provider>更新时,该HooK会触发重渲染,并使用最新传递给MyContext provider的context value 值
在这里插入图片描述

useEffect

useEffect()是副作用的钩子,可以实现特定的功能,如异步请求。语法如下:

import React from 'react';
import ReactDOM from 'react-dom';
function Counter(){//effect函数会在当前的组件渲染到DOM后执行React.useEffect(()=>{// 回调函数,其中是要进行的异步操作代码console.log('执行effect');return ()=>{//在执行下一次的effect之前要执行销毁函数console.log('销毁effect');}},[]);// [array]:useEffect执行的依赖,当该数组的值发生改变时,回调函数中的代码就会被指向// 如果[array]省略,则表示不依赖,在每次渲染时回调函数都会执行// 如果[array]是空数组,即useEffect第二项为[],表示只执行一次return <p>{0}</p>
}
function App(){const [visible,setVisible] = React.useState(true);return (<div>{visible?<Counter/>:null}<button onClick={()=>setVisible(false)}>hide</button></div>)
}
ReactDOM.render(<App />, document.getElementById('root'));

上述代码如何保证始终只有一个定时器

  • 1.设置依赖数组为空
  • 2.每次开启新的定时器之前清空老的定时器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt的QThread、QRunnable和QThreadPool的使用

1.相关描述 随机生产1000个数字&#xff0c;然后进行冒泡排序与快速排序。随机生成类继承QThread类、冒泡排序使用moveToThread方法添加到一个线程中、快速排序类继承QRunnable类&#xff0c;添加到线程池中进行排序。 2.相关界面 3.相关代码 widget.cpp #include "widget…

实验室储样瓶耐强酸强碱PFA材质试剂瓶适用新材料半导体

PFA&#xff0c;全名可溶性聚四氟乙烯&#xff0c;试剂瓶又叫取样瓶、样品瓶、广口瓶、储样瓶等。主要用于痕量分析、同位素分析等实验室&#xff0c;广泛应用于新兴的半导体、新材料、多晶硅、硅材、微电子等行业。 规格参考&#xff1a;30ml、60ml、100ml、125ml、250ml、30…

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文: 1.C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 c…

2024年湖北省职业院校技能大赛 “信息安全管理与评估”改革赛样题理论知识

理论技能与职业素养&#xff08;100分&#xff09; 2023年全国职业院校技能大赛&#xff08;高等职业教育组&#xff09; “信息安全管理与评估”理论技能 【注意事项】 1.理论测试前请仔细阅读测试系统使用说明文档&#xff0c;按提供的账号和密码登录测试系统进行测试&…

如何将本地项目上传到github上

将本地项目上传到github上有很多种方法&#xff0c;这里只讲述我认为最简单快捷的一种&#xff0c;先在github中创建一个仓库&#xff0c;接着在本地建文件夹&#xff0c;用命令行将项目推送到本地仓库&#xff0c;然后连接远程仓库&#xff0c;将本地项目推送到远程仓库上。要…

时间序列分析实战(四):Holt-Winters建模及预测

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

pytorch梯度累积

梯度累加其实是为了变相扩大batch_size&#xff0c;用来解决显存受限问题。 常规训练方式&#xff0c;每次从train_loader读取出一个batch的数据&#xff1a; for x,y in train_loader:pred model(x)loss criterion(pred, label)# 反向传播loss.backward()# 根据新的梯度更…

Jessibuca 插件播放直播流视频

jessibuca官网&#xff1a;http://jessibuca.monibuca.com/player.html git地址&#xff1a;https://gitee.com/huangz2350_admin/jessibuca#https://gitee.com/link?targethttp%3A%2F%2Fjessibuca.monibuca.com%2F 项目需要的文件 1.播放组件 <template ><div i…

3. Java中的锁

文章目录 乐观锁与悲观锁乐观锁(无锁编程,版本号机制)悲观锁两种锁的伪代码比较 通过 8 种锁运行案例,了解锁锁相关的 8 种案例演示场景一场景二场景三场景四场景五场景六场景七场景八 synchronized 有三种应用方式8 种锁的案例实际体现在 3 个地方 从字节码角度分析 synchroni…

CentOS 7全系列免费

CentOS 7 全系列免费&#xff1a;桌面版、工作站版、服务器版等等………… 上文&#xff0c;关于CentOS 7这句话&#xff0c;被忽略了。 注意版本&#xff1a;知识产权、网络安全。

python opencv实现图片清晰度增强

目录 一:直方图处理 二:图片生成 三:处理图片 直方图均衡化:直方图均衡化是一种增强图像对比度的方法,特别是当图像的有用数据的对比度接近背景的对比度时。OpenCV中的cv2.equalizeHist()函数可以实现直方图均衡化。 一:直方图处理 计算并返回一个图像的灰度直方图,…

JavaWeb之分布式事务规范

J2EE包括了两套规范用来支持分布式事务&#xff1a;一种是Java Transcation API(JTA)&#xff0c;一种是Java Transcation Service(JTS) JTA是一种高层的、与实现无关的、与协议无关的标准API。 JTS规定了支持JTA的事务管理器的实现规范。 两阶段提交协议 多个分布式数据库&…

2024河北国际光伏展

2024河北国际光伏展是一个专门展示和促进光伏技术与产业发展的国际性展览会。该展览会将于2024年在中国河北省举办&#xff0c;吸引来自世界各地的光伏企业、专家、学者和投资者参加。 展览会将展示最新的光伏技术和产品&#xff0c;包括太阳能电池板、光伏组件、逆变器、储能系…

Java foreach 循环陷阱

为什么阿里的 Java 开发手册里会强制不要在 foreach 里进行元素的删除操作&#xff1f; public static void main(String[] args) {List<String> list new ArrayList<>();list.add("王二");list.add("王三");list.add("有趣的程序员&qu…

adb pull 使用

adb pull 是 Android Debug Bridge (ADB) 工具提供的一个命令&#xff0c;用于将设备上的文件拷贝到计算机上。通过 adb pull 命令&#xff0c;实现从 Android 设备上获取文件并保存到本地计算机上。 使用 adb pull 命令的基本语法如下&#xff1a; adb pull <设备路径>…

【Spring连载】使用Spring Data访问 MongoDB(十)----分片Sharding

【Spring连载】使用Spring Data访问 MongoDB&#xff08;十&#xff09;----分片Sharding 一级目录二级目录三级目录 一级目录 二级目录 三级目录

ChatGPT 国内快速上手指南

ChatGPT简介 ChatGPT是由OpenAI团队研发的自然语言处理模型&#xff0c;该模型在大量的互联网文本数据上进行了预训练&#xff0c;使其具备了深刻的语言理解和生成能力。 GPT拥有上亿个参数&#xff0c;这使得ChatGPT在处理各种语言任务时表现卓越。它的训练使得模型能够理解上…

2024年CSC博导短期出国交流项目指南、材料准备及问题解答

2024年国家留学基金委&#xff08;CSC&#xff09;继续实施博士生导师短期出国交流项目&#xff0c;知识人网小编仅转载该项目指南、申请材料及说明和常见问题解答&#xff0c;详情请咨询国家留学基金委。 2024年博士生导师短期出国交流项目指南 第一章 总则 第一条 为进一步…

如何把mp4音频转换成mp3?四招教你将MP4音频转为MP3格式

如何把mp4音频转换成mp3&#xff1f;在数字多媒体的世界里&#xff0c;音频和视频格式多种多样&#xff0c;每种格式都有其独特之处。其中&#xff0c;MP4和MP3是最常见的两种格式。MP4通常用于视频文件&#xff0c;而MP3则专用于音频。有时&#xff0c;我们可能希望将MP4文件中…

[算法沉淀记录] 排序算法 —— 堆排序

排序算法 —— 堆排序 算法基础介绍 堆排序&#xff08;Heap Sort&#xff09;是一种基于比较的排序算法&#xff0c;它利用堆这种数据结构来实现排序。堆是一种特殊的完全二叉树&#xff0c;其中每个节点的值都必须大于或等于&#xff08;最大堆&#xff09;或小于或等于&am…