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

React-useRef与DOM操作

#题引:我认为跟着官方文档学习不会走歪路

ref使用

组件重新渲染时,react组件函数里的代码会重新执行,返回新的JSX,当你希望组件“记住”某些信息,但又不想让这些信息触发新的渲染时,你可以使用ref,ref 是一个普通的 JavaScript 对象,具有可以被读取和修改的current属性。

import { useRef } from 'react';
const ref = useRef(0);

useRef 返回一个这样的对象:

{ current: 0 // 你向 useRef 传入的值
}

更改 ref 不会重新渲染组件,它像一个 React 追踪不到的、用来存储组件信息的秘密“口袋”。(这就是让它成为 React 单向数据流的“脱围机制”的原因),你可以将其视为没有设置函数的常规 state 变量。

通常,当你的组件需要“跳出” React 并与外部 API 通信时,你会用到 ref ,以下是这些罕见情况中的几个:

  • 存储 timeout ID
  • 存储和操作 DOM 元素
  • 存储不需要被用来计算 JSX 的其他对象。

ref和DOM

有时你可能需要访问由 React 管理的 DOM 元素 —— 例如,让一个节点获得焦点、滚动到它或测量它的尺寸和位置。在 React 中没有内置的方法来做这些事情,所以你需要一个指向 DOM 节点的 ref 来实现。

在你的组件中使用它声明一个 ref:

const myRef = useRef(null);

将 ref 作为 ref 属性值传递给想要获取的 DOM 节点的 JSX 标签:

<div ref={myRef}>

当 React 为这个 div创建一个 DOM 节点时,React 会把对该节点的引用放入 myRef.current。然后,你可以从 事件处理器 访问此 DOM 节点,并使用在其上定义的内置浏览器 API。

// 你可以使用任意浏览器 API,例如:
myRef.current.scrollIntoView();

如果你尝试将 ref 放在你自己的组件上,例如MyInput ,默认情况下你会得到null,控制台报错,因为默认情况下,React 不允许组件访问其他组件的 DOM 节点。甚至自己的子组件也不行。这是react的安全限制。

非要使用:使用 forwardRef 并将第二个 ref 参数传递给特定节点来暴露 DOM 节点

const MyInput = forwardRef((props, ref) => {return <input {...props} ref={ref} />;
});

相关文章:

React-useRef与DOM操作

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 ref使用 组件重新渲染时&#xff0c;react组件函数里的代码会重新执行&#xff0c;返回新的JSX&#xff0c;当你希望组件“记住”某些信息&#xff0c;但又不想让这些信息触发新的渲染时&#xff0c;你可以使用ref&#x…...

Mistral AI 发布 Pixtral Large 模型:多模态时代的开源先锋

Mistral AI 最新推出的 Pixtral Large 模型&#xff0c;带来了更强的多模态能力。作为一款开源的多模态模型&#xff0c;它不仅在参数量上达到 1240 亿&#xff0c;更在文本和图像理解上实现了质的飞跃。 模型亮点 1. 多模态能力再升级 Pixtral Large 配备了 123B 参数的解码器…...

Windows、Linux多系统共享蓝牙设备

Windows、Linux多系统共享蓝牙设备 近来遇到一个新问题&#xff0c;就是双系统共享蓝牙鼠标。因为一直喜欢在Windows、Linux双系统之间来回切换&#xff0c;而每次切换系统蓝牙就必须重新配对&#xff0c;当然&#xff0c;通过网络成功解决了问题。 通过这个问题&#xff0c;稍…...

C语言 | Leetcode C语言题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; #define MAX_STR_LEN 32 typedef unsigned long long ULL;void reverseStr(char * str) {int n strlen(str);for (int l 0, r n-1; l < r; l, r--) {char c str[l];str[l] str[r];str[r] c;} }ULL * getCandidates(const char * n…...

wsl虚拟机中的dockers容器访问不了物理主机

1 首先保证wsl虚拟机能够访问宿主机IP地址&#xff0c;wsl虚拟机通过vEthernet (WSL)的地址访问&#xff0c;着意味着容器也要通过此IP地址访问物理主机。 2 遇到的问题&#xff1a;wsl虚拟机中安装了docker&#xff0c;用在用到docker容器内的开发环境&#xff0c;但是虚拟机…...

Spark RDD 的宽依赖和窄依赖

通俗地理解 Spark RDD 的 宽依赖 和 窄依赖&#xff0c;可以通过以下比喻和解释&#xff1a; 1. 日常生活比喻 假设你在管理多个团队完成工作任务&#xff1a; 窄依赖&#xff1a;每个团队只需要关注自己的分工&#xff0c;完成自己的任务。例如&#xff0c;一个人将纸张折好&…...

二进制转十进制

解题思路分析 二进制转十进制原理&#xff1a;二进制数转换为十进制数的基本原理是按位权展开相加。对于一个二进制数&#xff0c;从右往左每一位的位权依次是将每一位上的数字&#xff08;0 或 1&#xff09;乘以其对应的位权&#xff0c;然后把所有结果相加&#xff0c;就得…...

深度学习:神经网络中的非线性激活的使用

深度学习&#xff1a;神经网络中的非线性激活的使用 在神经网络中&#xff0c;非线性激活函数是至关重要的组件&#xff0c;它们使网络能够捕捉和模拟输入数据中的复杂非线性关系。这些激活函数的主要任务是帮助网络解决那些无法通过简单的线性操作&#xff08;如权重相乘和偏…...

Python缓存:两个简单的方法

缓存是一种用于提高应用程序性能的技术&#xff0c;它通过临时存储程序获得的结果&#xff0c;以便在以后需要时重用它们。 在本文中&#xff0c;我们将学习Python中的不同缓存技术&#xff0c;包括functools模块中的 lru_cache和 cache装饰器。 简单示例&#xff1a;Python缓…...

原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型

无论是在什么手机机型下&#xff0c;自定义的导航都和右侧的胶囊水平一条线上。如图下 以上图iphone12&#xff0c;13PRo 以上图是没有带黑色扇帘的机型 以下是调试器看的wxml的代码展示 注意&#xff1a;红色阔里的是自定义导航&#xff08;或者其他的logo啊&#xff0c;返回之…...

经验笔记:远端仓库和本地仓库之间的连接(以Gitee为例)

经验笔记&#xff1a;远端仓库和本地仓库之间的连接 方法一&#xff1a;先创建远端仓库&#xff0c;再克隆到本地 创建远端仓库 登录到你的Git托管平台&#xff08;如Gitee、GitHub、GitLab、Bitbucket等&#xff09;。点击“New Repository”或类似按钮&#xff0c;创建一个新…...

利用RAGflow和LM Studio建立食品法规问答系统

前言 食品企业在管理标准、法规&#xff0c;特别是食品原料、特殊食品法规时&#xff0c;难以通过速查法规得到准确的结果。随着AI技术的发展&#xff0c;互联网上出现很多AI知识库的解决方案。 经过一轮测试&#xff0c;找到问题抓手、打通业务底层逻辑、对齐行业颗粒度、沉…...

ffplay音频SDL播放处理

1、从解码数组获取到解码后的数据 static int audio_decode_frame(VideoState *is) {int data_size, resampled_data_size;av_unused double audio_clock0;int wanted_nb_samples;Frame *af;if (is->paused)return -1;//音频数组队列获取数据do { #if defined(_WIN32)while …...

自动化仪表故障排除法

自动化仪表主要是指在企业的实际生产工程当中&#xff0c;开展检测、控制、执行以及显示等一系列仪表的总称。合理地利用自动化仪表能够及时地掌握企业生产的动态&#xff0c;并获取相应的数据&#xff0c;从而推动生产过程的有序运行。 在自动化控制系统中&#xff0c;自动化…...

WPF 中 MultiConverter ——XAML中复杂传参方式

1. XAML代码 <!-- 数据库表格 --> <!-- RowHeaderWidth"0": 把默认的行表头隐藏 --> <DataGridx:Name"xDataGrid"Grid.Row"2"hc:DataGridAttach.ShowRowNumber"True"ItemsSource"{Binding WaferInfos, ModeT…...

实验室管理现代化:Spring Boot技术方案

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

aws凭证(一)凭证存储

AWS 凭证用于验证身份,并授权对 DynamoDB 等等 AWS 服务的访问。配置了aws凭证后,才可以通过编程方式或从AWS CLI连接访问AWS资源。凭证存储在哪里呢?有以下几个方法: 一、使用文件存储 1、介绍 文件存储适用于长期和多账户配置。AWS SDK 也会自动读取配置文件中的凭证。…...

jmeter常用配置元件介绍总结之断言

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之线程组 4.jmeter常用配置元件介绍总结之函数助手 5.jmeter常用配置元件介绍总结之取样器 6.jmeter常用配置元件介绍总结之jsr223执行pytho…...

JMeter监听器与压测监控之Grafana

Grafana 是一个开源的度量分析和可视化套件&#xff0c;通常用于监控和观察系统和应用的性能。本文将指导你如何在 Kali Linux 上使用 Docker 来部署 Grafana 性能监控平台。 前提条件 Kali Linux&#xff1a;确保你已经安装了 Kali Linux。Docker&#xff1a;确保你的系统已…...

MySQL8 安装教程

一、从官网下载mysql-8.0.18-winx64.zip安装文件&#xff08; 从 https://dev.mysql.com/downloads/file/?id484900 下载zip版本安装包 mysql-8.0.18-winx64.zip 解压到本地磁盘中&#xff0c;例如解压到&#xff1a;D盘根目录&#xff0c;并改名为MySQL mysql-8.0.34-winx6…...

不止于导航:用AI Habitat的语义分割数据,教你构建自己的室内物体识别与场景理解Pipeline

不止于导航&#xff1a;用AI Habitat的语义分割数据构建室内物体识别与场景理解Pipeline 在计算机视觉与机器人领域&#xff0c;室内场景理解一直是极具挑战性的研究方向。传统方法依赖于昂贵的传感器设备和人工标注数据&#xff0c;而仿真平台的出现为这一领域带来了革命性变…...

ANSI转义序列封装:cursor-reset库实现终端光标精准控制

1. 项目概述与核心价值 最近在折腾一些自动化工具链&#xff0c;发现一个挺有意思的小项目&#xff0c;叫 zhitrend/cursor-reset 。乍一看名字&#xff0c;你可能会觉得这只是一个重置光标位置的小工具&#xff0c;但实际用下来&#xff0c;我发现它解决的痛点非常精准&…...

GDScript Mod Loader:为Godot游戏打造专业模组生态的完整指南

1. 项目概述&#xff1a;为你的Godot游戏注入社区活力如果你是一名使用Godot引擎的独立游戏开发者&#xff0c;或者是一位热衷于为喜爱的游戏创造新内容的玩家&#xff0c;那么“模组”这个概念你一定不陌生。模组&#xff0c;或者说Mod&#xff0c;是游戏社区生命力的重要源泉…...

OpenClaw:让 AI 从 “对话” 走向 “实干” 的开源智能体

在人工智能技术快速发展的今天&#xff0c;大语言模型的对话能力已日趋成熟&#xff0c;但 “能说不能做” 的痛点始终制约着 AI 的实际应用价值。2026 年&#xff0c;一款名为 OpenClaw&#xff08;社区昵称 “小龙虾 AI”&#xff09;的开源项目迅速走红&#xff0c;它以 “真…...

收藏!小白程序员快速入门大模型:多模态LLMs学习指南

多模态大模型&#xff08;MLLMs&#xff09;通过整合图像、文本、语音等&#xff0c;实现跨模态理解和生成。文章介绍了MLLMs的基本概念、架构&#xff0c;包括多模态编码器、连接器与LLM&#xff0c;并区分了双编码器架构和基于LLM的架构。同时&#xff0c;文章探讨了VLM前沿动…...

C语言打印三角形别再只会用*了!用字母、数字、符号玩出新花样(附完整代码)

C语言打印三角形&#xff1a;用字母、数字和符号玩转循环艺术 在C语言入门阶段&#xff0c;打印三角形几乎是每个初学者必经的练习。但你是否已经厌倦了千篇一律的星号(*)图案&#xff1f;今天&#xff0c;我们将打破常规&#xff0c;探索如何用字母、数字和各种符号来创造独特…...

基于浏览器自动化的高级爬虫框架autoclaw实战指南

1. 项目概述与核心价值最近在折腾自动化脚本时&#xff0c;发现了一个挺有意思的GitHub项目&#xff0c;叫jmoraispk/autoclaw。乍一看名字&#xff0c;可能会联想到“自动爪子”或者“爬虫”&#xff0c;实际上&#xff0c;它也确实是一个专注于自动化网页交互和数据抓取的工具…...

时间序列预测总翻车?试试用Python实现嵌套交叉验证来守住‘未来’数据

时间序列预测中的嵌套交叉验证&#xff1a;用Python守住数据的时间壁垒 当你在预测下周的销售额、下个月的电力负荷或明天的股价时&#xff0c;最可怕的不是模型不够复杂&#xff0c;而是它偷偷"作弊"了——通过窥探未来的数据来假装自己很聪明。这种时间序列预测中的…...

从find到ind2sub:Matlab数据筛选后操作的完整工作流(以R2023b为例)

从find到ind2sub&#xff1a;Matlab数据筛选后操作的完整工作流&#xff08;以R2023b为例&#xff09; 在数据分析与科学计算领域&#xff0c;Matlab作为一款强大的工具&#xff0c;其矩阵操作能力尤为突出。面对大型矩阵或高维数组时&#xff0c;如何高效地定位并处理特定条件…...

STM32F4上跑FreeType:手把手教你为嵌入式GUI添加矢量字体(附源码)

STM32F4实战&#xff1a;FreeType矢量字体移植与GUI深度优化指南 1. 嵌入式矢量字体技术选型与原理 在资源受限的嵌入式环境中实现矢量字体渲染&#xff0c;本质上是一场内存效率与视觉质量的博弈。FreeType作为行业标准的字体引擎&#xff0c;其核心优势在于采用二次贝塞尔曲…...