React——useRef()

server/2024/9/23 9:28:31/

useRef 是 React 的一个 Hook,用于在组件的整个生命周期内持久化保存数据。主要有以下几个用途:

  1. 存储对 DOM 节点的引用:通过给 DOM 元素添加 ref 属性来直接访问实际的 DOM 节点。这常用于需要直接操作 DOM 时,比如管理焦点、文本选择或媒体播放。

    示例代码:

function TextInputWithFocusButton() {const inputEl = useRef(null);const onButtonClick = () => {// `current` 指向挂载到 `input` 元素的真实 DOM 节点inputEl.current.focus();};return (<><input ref={inputEl} type="text" /><button onClick={onButtonClick}>Focus the input</button></>);}
  1. 保存组件状态跨渲染周期不变的数据useRef 返回的对象在组件的整个生命周期内保持不变,可以用来保存任何可变值。与实例属性类似,当你想要保存不需触发视图重新渲染的数据时,可以使用 useRef

    示例代码:

function TimerComponent() {const intervalRef = useRef();useEffect(() => {const id = setInterval(() => {// ...每隔一段时间执行的操作...}, 1000);intervalRef.current = id;return () => clearInterval(intervalRef.current);}, []);// ...}
  1. 追踪组件是否已经挂载或卸载:有时我们需要知道组件是否仍然挂载在 DOM 上,以避免在异步操作(如 API 调用)完成后调用 setState 导致的潜在错误。

    示例代码:

function MyComponent() {const isMountedRef = useRef(true);useEffect(() => {return () => {// 组件卸载时更新 ref 的值isMountedRef.current = false;};}, []);// 使用 isMountedRef.current 确认组件是否挂载}
  1. 作为实例变量:对于需要存储任何可变值而又不想导致组件重新渲染的场景非常有用。因为 useRef 创建的是一个普通 JavaScript 对象,其 .current 属性被初始化为传入的参数(useRef 的初始值),这个值可以自由更改。

总结来说,useRef 主要用于访问 DOM 节点、保存可变数据和跟踪组件挂载状态,且对它所保存的数据的修改不会触发组件的重新渲染。


http://www.ppmy.cn/server/107398.html

相关文章

【软件】常用软件教程一:码云(Gitee)使用方法

文章目录 一、简介二、创建远程仓库三、配置SSH公钥四、同步 Gitee 仓库内容到本地五、本地新建文件并同步至 Gitee六、删除远程仓库中的指定文件七、常见代码 一、简介 Git 是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更。它是由 Linus Torvalds 创建的&…

Redis key的过期时间和永久有效

Redis key的过期时间和永久有效 设置键的过期时间 1. **使用 EXPIRE 命令**&#xff1a; EXPIRE 命令用于设置一个键的过期时间&#xff08;以秒为单位&#xff09;。 **语法**&#xff1a;shellEXPIRE key seconds **示例**&#xff1a;shellEXPIRE mykey 60 上述命令将 …

[Algorithm][综合训练][比那名居的桃子][chika和蜜柑][礼物的最大价值]详细讲解

目录 1.比那名居的桃子1.题目链接2.算法原理详解 && 代码实现 2.chika和蜜柑1.题目链接2.算法原理详解 && 详细讲解 3.礼物的最大价值1.题目链接2.算法原理详解 && 代码实现 1.比那名居的桃子 1.题目链接 比那名居的桃子 2.算法原理详解 && …

黑神话悟空丨资源合集,光追配置+修改器+各种奇奇怪怪的MOD

国产3A大作 黑神话悟空 推出了一些奇奇怪怪的mod(非官方)&#xff0c;作为一款备受瞩目的单机作品&#xff0c;黑神话悟空 不仅在剧情和画面上表现出色&#xff0c;同时也为玩家提供了丰富的Mod支持。 哈哈哈哈&#xff0c;总是就是奇奇怪怪&#xff0c;悟空被玩坏了&#xff…

【快速选择算法】解决TopK问题中前K小的数字问题

目录 1.前言2.题目简介3.求解思路4.示例代码 1.前言 在一个数组中找到这个数组前K小的数字有三种方式&#xff1a; 排序 O(N*logN)堆排序&#xff1a;建立一个k个大小的大堆(如果是找前K大的数字的话用小堆) O(N*logK)快速选择算法&#xff1a;原地交换数字&#xff0c;使得该…

Dubbo源码解析之@DubboService、@DubboReference(Dubbo源码一)

更好的阅读体验&#xff1a;Dubbo源码解析之DubboService、DubboReference&#xff08;Dubbo源码一&#xff09; 视频讲解&#xff1a;https://www.bilibili.com/video/BV1nBsMejEbL 对于Dubbo用的最多的就是DubboService、DubboReference&#xff0c;与之对应的就是服务的提供…

高效的时间序列可视化:减少认知负荷获得更清晰的洞察

可视化时间序列数据是具有挑战性,尤其是涉及多个数据集时。精心设计的可视化不仅能清晰地传达信息,还能减少观察者的认知负荷,使其更容易提取有意义的洞察。 在本文中,我们将探讨使真实世界的疫苗接种数据来可视化单个时间序列和多个时间序列。 数据可视化中认知负荷的重要性 …

从etcd学习raft

在etcd的项目下有一个使用raft的示例&#xff0c;在之前读etcd代码的时候会比较难理解raft相关的代码。因此通过这个示例会更容易的了解raft相关的实现细节。 我将这部分代码推送到了我的git仓库&#xff1a;https://github.com/yugu2day/raftexample 在示例中&#xff0c;主…