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

React 中如何获取 DOM:用 useRef 操作非受控组件

📌 场景说明

在写 React 的时候,通常我们是通过“受控组件”来管理表单元素,比如用 useState 控制 <input> 的值。

但有些时候,控制的需求只是临时性的,或者完全不需要重新渲染组件,这时候直接访问 DOM 元素更合适,也更高效。

比如下面这段代码:

import { useRef } from "react"// 1. useRef 生成 ref 对象,绑定到 DOM 标签身上
// 2. DOM 可用时,通过 ref.current 获取真实 DOM
// 3. 这个时机是在组件渲染完成之后function App() {const inputRef = useRef(null)return (<div><input type="text" ref={inputRef} /></div>)
}export default App

🧠 核心理解

这里用到了 useRef,它的作用是生成一个可变的引用对象,并且可以挂载到任意 DOM 元素上。

在这段代码中,我们做了三件事:

  1. const inputRef = useRef(null) —— 创建一个 ref 对象,初始值设为 null。
  2. <input ref={inputRef} /> —— 把这个 ref 绑定在 <input> 标签上。
  3. 等组件渲染完毕后,就可以通过 inputRef.current 访问到真实的 DOM 元素。

这种方式非常适合处理“非受控组件”的需求,比如:

  • 页面加载后自动聚焦某个输入框
  • 读取元素的 scrollTop、宽高等属性
  • 与基于 DOM 的第三方库(比如一些图表库)集成

⚠️ 一点小提醒

虽然 useRef 很方便,但也要注意它不会引发组件的重新渲染,所以它不适合用来存储那些希望“响应式更新”的数据。

它更像是一个“通用口袋”,可以放点什么,但不会影响 React 的生命周期。


✍️ 后记

我现在渐渐觉得,useRef 在 React 里其实就像是那种“不请自来的幕后小帮手”:

默默地跟着我们,从不打扰组件的渲染逻辑,但一旦需要操作 DOM,它总是第一时间可以派上用场。

这是我在写一些小型交互逻辑时经常依赖的工具,也算是我理解 React“控制 vs 非控制”思想的一个小切口。

如果你有类似的需求,比如想让一个输入框在页面加载后自动获得焦点,不妨试试看用 useRef 处理看看。

它不会改变 React 的声明式风格,却能给你一点必要的“命令式能力”。

如果有兴趣,我可以在下一篇里记录一下“如何在 useEffect 中结合 useRef 自动聚焦输入框”。

相关文章:

React 中如何获取 DOM:用 useRef 操作非受控组件

&#x1f4cc; 场景说明 在写 React 的时候&#xff0c;通常我们是通过“受控组件”来管理表单元素&#xff0c;比如用 useState 控制 <input> 的值。 但有些时候&#xff0c;控制的需求只是临时性的&#xff0c;或者完全不需要重新渲染组件&#xff0c;这时候直接访问…...

GoogleCodeUtil.java

Google动态验证码实现 GoogleCodeUtil.java package zwf;import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.security.SecureRandom;/** https://mvnrepository.com/artifact/commons-codec/…...

Hutool之DateUtil:让Java日期处理变得更加简单

前言 在Java开发中&#xff0c;日期和时间的处理是一个常见问题。为了简化这个过程&#xff0c;许多开发者会使用第三方工具包&#xff0c;如Hutool。Hutool是一个Java工具包&#xff0c;提供了许多实用的功能&#xff0c;其中之一就是日期处理。日期时间工具类是Hutool的核心包…...

解锁古籍中的气候密码,探索GPT/BERT在历史灾害研究中的前沿应用;气候史 文本挖掘 防灾减灾;台风案例、干旱案例、暴雨案例

历史灾害文献分析方法论的研究&#xff0c;是连接过去与未来的关键桥梁。通过对古籍、方志、档案等非结构化文本的系统性挖掘与量化分析&#xff0c;不仅能够重建千年尺度的灾害事件序列&#xff08;如台风、洪旱等&#xff09;&#xff0c;弥补仪器观测数据的时空局限性&#…...

DeepSeek-R3、GPT-4o 与 Claude-3.5-Sonnet 全面对比:性能、应用场景与技术解析

随着大模型技术的迅猛发展&#xff0c;国产模型正逐渐崭露头角&#xff0c;尤其是DeepSeek-R3的发布&#xff0c;更是在AI技术社区中引起广泛关注。而与此同时&#xff0c;国际领先的GPT-4o和Claude-3.5-Sonnet也在不断迭代升级&#xff0c;持续刷新业界对AI能力的认知。下文将…...

智能翻译播放器,让无字幕视频不再难懂

打工人们你们好&#xff01;这里是摸鱼 特供版~ 今天给大家带来一款超牛的黑科技——Splayer&#xff0c;完全免费的智能翻译播放器&#xff0c;让你轻松看懂无字幕视频&#xff01; 推荐指数&#xff1a;★★★★★ 软件简介 Splayer 是一款完全免费的智能翻译播放器&#…...

快手本地生活2024年GMV同增200%,“新线城市+AI”将成增长引擎

4月17日&#xff0c;“新线大市场&#xff0c;AI新机遇”快手本地生活2025聚力大会在沈阳召开。 会上&#xff0c;快手高级副总裁、本地生活事业部负责人笑古在聚力大会上表示&#xff0c;“新线城市AI”将成为快手本地生活的增长引擎。 据「TMT星球」了解&#xff0c;2024年…...

第七篇:系统分析师第三遍——1、2章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试&#xff0c;训练学习能力&#xff0c;而非单纯以拿证为目的。 1.在复习过程中&#xff0c;训练快速阅读能力、掌…...

2025妈妈杯数学建模D题完整分析论文(共42页)(含模型建立、代码)

2025 年第十五届 MathorCup 数学建模D题完整分析论文 目录 摘要 一、问题分析 二、问题重述 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;MATLAB和Python&#xff09; 4.1.4问题1结果…...

软考高级-系统架构设计师 论文范文参考(一)

文章目录 论SOA技术的应用论SOA在企业信息化中的应用论UP&#xff08;统一过程方法&#xff09;的应用论分布式数据库的设计与实现论改进Web服务器性能的有关技术论基于UML的需求分析论基于构件的软件开发论基于构件的软件开发(二) 论SOA技术的应用 摘要&#xff1a;  本人于…...

江湖路远,唯PUT可稳:Express 路由更新招式全解

前言 江湖传闻,后端开发如同修炼绝世武功:有人精通 POST 掌,横扫千军;有人修习 GET 指法,探查万象。而真正踏入高阶境界的高手,常常默默修炼一门冷门却威力极强的秘技,PUT 神功。 今日时机正好,你我相逢于码海江湖,不如来一场技术切磋,也许能悟出更新之道,功力再上…...

【k8s系列1】一主两从结构的环境准备

环境准备 虚拟机软件准备及安装&#xff0c;这里就不详细展开了&#xff0c;可以看文章:【一、虚拟机vmware安装】 linux环境准备及下载&#xff0c;下载镜像centOS7.9&#xff0c;以前也有写过这个步骤的文章&#xff0c;可以看&#xff1a;【二、安装centOS】 开始进入正题…...

通过特定协议拉起 electron 应用

在 Android 通过 sheme 协议可以拉起其他应用。 electron 应用也可以通过类似特定协议被拉起。 在同时有 web、客户端的应用里&#xff0c;可以通过这种方式在 web 拉起客户端。 支持拉起客户端 const PROTOCOL xxxif (process.defaultApp) {// 这里是开发环境&#xff0c;有…...

IDEA MyBatisCodeHelper Pro插件高版本解密

声明&#xff0c;该方法仅仅作为个人研究学习使用&#xff0c;请勿传播 版本说明 系统&#xff1a;macOS&#xff08;Windows同理&#xff09;IDE&#xff1a;IntelliJ IDEA 2024.4MyBatisCodeHelper Pro 3.4 环境准备 从插件市场下载MyBatisCodeHelper Pro 找到MyBatisCo…...

网站制作公司哪家好?如何选择靠谱的网站设计公司

在当今数字化时代&#xff0c;企业想要在互联网上立足&#xff0c;一个专业、美观且功能强大的网站是必不可少的。然而&#xff0c;面对众多的网站建设公司&#xff0c;如何选择一家真正适合自己需求的合作伙伴&#xff0c;成为了许多企业主和创业者面临的难题。毕竟&#xff0…...

Linux之基础命令

Linux作为开源操作系统的代表&#xff0c;以其高效、灵活和强大的命令行工具闻名。无论是系统管理、开发调试还是日常使用&#xff0c;掌握基础命令都是与Linux系统交互的必备技能。本文整理了20个最常用的Linux基础命令&#xff0c;帮助新手快速入门。 目录 目录与文件导航文…...

使用手机归属地查询API,使效率事半功倍

手机归属地查询API通过查询手机号码的归属地信息&#xff0c;为企业提供了一个高效、便捷的解决方案&#xff0c;帮助企业在竞争激烈的市场中脱颖而出。 代码示例 请求参数说明: 名称必填类型说明key是string个人中心查看phone是int手机号 返回参数说明: 名称类型说明phon…...

基于FPGA的AES加解密系统verilog实现,包含testbench和开发板硬件测试

目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 4.1 字节替换&#xff08;SubBytes&#xff09; 4.2 行移位&#xff08;ShiftRows&#xff09; 4.3 列混合&#xff08;MixColumns&#xff09; 4.4 轮密钥加&#xff08;AddRoundKey&#xff09; 4.…...

【AI部署】腾讯云GPU -—SadTalker的AI数字人访问web服务—未来之窗超算中心

访问部署在Cloud Studio上的web服务 当你把该项目部署在本地时&#xff0c;访问该服务的请求地址为http://localhost:8080/hello&#xff1b;当你把该项目部署在Cloud Studio工作台启动时&#xff0c;要想访问到该服务&#xff0c;需要先在工作台右侧打开访问链接面板&#xff…...

Linux:命令行参数、环境变量

命令行参数 执行程序时&#xff0c;可以从命令行传值给 C 程序。这些值被称为命令行参数&#xff0c;它们对程序很重要&#xff0c;特别是当我们想从外部控制程序&#xff0c;而不是在代码内对这些值进行硬编码时&#xff0c;就显得尤为重要了。 在 C 语言中&#xff0c;命令…...

Linux CentOS 更改MySQL数据库目录位置

在 CentOS 系统上更改 MySQL&#xff08;或 MariaDB&#xff09;数据库目录位置&#xff08;datadir&#xff09;需要谨慎操作&#xff0c;以避免数据丢失或服务启动失败。以下是详细步骤&#xff1a; 1. 停止 MySQL/MariaDB 服务 bash 复制 sudo systemctl stop mysqld …...

Unity-微信截图功能简单复刻-03绘制空心矩形

思路-绘制空心矩形 拓展UGUI的Graphic类,实现拖拽接口。 开始拖拽时记录鼠标位置&#xff0c; 使用拖拽中的鼠标位置和记录的位置&#xff0c;计算矩形顶点&#xff0c;绘制矩形。 两个三角形合并为一个矩形&#xff0c;作为空心矩形的一条边&#xff0c;四个边合并为空心矩形…...

Flutter与FastAPI的OSS系统实现

作者&#xff1a;孙嘉成 目录 一、对象存储 二、FastAPI与对象存储 2.1 缤纷云S4服务API对接与鉴权实现 2.2 RESTful接口设计与异步路由优化 三、Flutter界面与数据交互开发 3.1 应用的创建 3.2页面的搭建 3.3 文件的上传 关键词&#xff1a;对象存储、FastAPI、Flutte…...

环境搭建与入门:Flutter SDK安装与配置

环境搭建与入门&#xff1a;Flutter SDK安装与配置 一、Flutter开发环境概述 1.1 Flutter开发环境组成 Flutter开发环境主要包含以下几个关键组件&#xff1a; Flutter SDK&#xff1a;Flutter的核心开发工具包Dart SDK&#xff1a;Flutter使用的编程语言环境IDE/编辑器&am…...

MATLAB 控制系统设计与仿真 - 35

MATLAB鲁棒控制器分析 所谓鲁棒性是指控制系统在一定(结构&#xff0c;大小)的参数扰动下&#xff0c;维持某些性能的特征。 根据对性能的不同定义&#xff0c;可分为稳定鲁棒性(Robust stability)和性能鲁棒性(Robust performance)。 以闭环系统的鲁棒性作为目标设计得到的…...

多模态记忆融合:基于LSTM的连续场景生成——突破AI视频生成长度限制

一、技术背景与核心挑战 2025年视频生成领域面临的关键难题是长时程连贯性——传统方法在生成超过5分钟视频时会出现场景跳变、物理规则不一致等问题。本研究提出时空记忆融合架构&#xff08;ST-MFA&#xff09;&#xff0c;通过LSTM记忆门控与多模态对齐技术&#xff0c;在R…...

架构师面试(三十二):注册中心数据结构

问题 提到【注册中心】&#xff0c;我们对它的基本功能&#xff0c;肯定可以顺手拈来&#xff0c;比如&#xff1a;【服务注册】【服务发现】【健康检查】【变更通知】等。 透过这些基本功能&#xff0c;一个普适的注册中心的数据结构应该如何设计呢&#xff1f; 可以结合着…...

Oracle 19c新特性:OCP认证考试与职业跃迁的关键?

在数字化转型的浪潮中&#xff0c;Oracle 19c作为数据库领域的旗舰版本&#xff0c;不仅承载着技术革新的使命&#xff0c;更成为IT从业者职业进阶的“黄金跳板”。无论是企业级应用的高可用性需求&#xff0c;还是云原生架构的快速迭代&#xff0c;Oracle 19c的智能化与多模型…...

360蜘蛛IP完整版,360搜索引擎蜘蛛IP列表.pdf

360搜索的蜘蛛在访问网站时&#xff0c;都会带上带有360spider签名信息的UA&#xff0c;其形态为&#xff1a; Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider 为满足站长朋友们的需求&a…...

C++_设计模式\_观察者模式(Observer Pattern)

&#x1f44b; Hi, I’m liubo&#x1f440; I’m interested in harmony&#x1f331; I’m currently learning harmony&#x1f49e;️ I’m looking to collaborate on …&#x1f4eb; How to reach me …&#x1f4c7; sssssdsdsdsdsdsdasd&#x1f383; dsdsdsdsdsddfsg…...

23种设计模式全面解析

设计模式是解决软件设计中常见问题的经典方案。根据《设计模式&#xff1a;可复用面向对象软件的基础》&#xff08;GoF&#xff09;&#xff0c;23种设计模式分为以下三类&#xff1a; 一、创建型模式&#xff08;5种&#xff09; 目标&#xff1a;解耦对象的创建过程&#x…...

学术AI工具推荐

一、基础信息对比 维度知网研学AI&#xff08;研学智得AI&#xff09;秘塔AIWOS AI开发公司同方知网&#xff08;CNKI&#xff09;上海秘塔网络科技Clarivate Analytics是否接入DeepSeek✅ 深度集成&#xff08;全功能接入DeepSeek-R1推理服务&#xff09;✅ 通过API接入DeepS…...

Agent的九种设计模式 介绍

Agent的九种设计模式 介绍 一、ReAct模式 原理:将推理(Reasoning)和行动(Acting)相结合,使Agent能够在推理的指导下采取行动,并根据行动的结果进一步推理,形成一个循环。Agent通过生成一系列的思维链(Thought Chains)来明确推理步骤,并根据推理结果执行相应的动作,…...

Python如何助力区块链网络安全?从攻击防范到智能合约审计

Python如何助力区块链网络安全?从攻击防范到智能合约审计 引言:区块链安全,真的安全吗? 区块链作为去中心化技术的代表,被誉为“不可篡改”的分布式账本。但事实真的如此吗?现实世界中,智能合约漏洞、私钥泄露、交易欺诈等安全问题层出不穷,让区块链网络安全成为一个关…...

磁流变式汽车减振器创新设计与关键技术研究

摘要 本文针对智能悬架系统的发展需求&#xff0c;深入探讨磁流变减振器&#xff08;MR Damper&#xff09;的核心设计原理与工程实现路径。通过建立磁场-流场耦合模型&#xff0c;优化磁路结构与控制策略&#xff0c;提出具有快速响应特性的新型磁流变减振器设计方案&#xf…...

Kafka 时间轮

Kafka存在大量的延迟操作&#xff0c;比如延迟删除、延迟拉取等。Kafka基于时间轮概念自定义了一个用于延迟操作的定时器。 JDK自带的Timer和DelayQueue缺陷 Timer和DelayQueue都可以插入多个定时任务&#xff0c;它们都使用一个优先级队列来管理任务&#xff0c;复杂度为O(l…...

加锁注意事项

结论&#xff1a; 1&#xff1a;加锁前不能有可能异常的代码结构&#xff0c;原因&#xff1a;没加锁&#xff0c;直接因为上边的异常走finall解锁&#xff0c;导致不必要的问题 2&#xff1a;加锁后&#xff0c;try之前。有异常代码&#xff0c;导致无法走到try进行解锁.后果&…...

Vue3+Vite+TypeScript+Element Plus开发-22.客制Table组件

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 Pinia持久化 动态路由 -动态增加路由 动态路由-动态删除…...

hive的基础配置优化与数仓流程

1.HDFS副本数 dfs.replication&#xff08;HDFS&#xff09; 文件副本数&#xff0c;通常设为3&#xff0c;不推荐修改。 如果测试环境只有二台虚拟机&#xff08;2个datanode节点&#xff09;&#xff0c;此值要修改为2。 2.Yarn基础配置 2.1NodeManager配置 2.1.1CPU配置 …...

制作一个简单的操作系统3

打印一个 hello 在 INT 10H 中断中的作用 INT 10H 是 BIOS 提供的中断&#xff0c; 当 AH 寄存器的值被设置为 0x0e 时&#xff0c;INT 10H 中断就会以 TTY 模式工作。 mov ah, 0x0e ;tty模式 mov al, H int 0x10 mov al, e int 0x10 mov al, l int 0x10 int 0x10 ; l is stil…...

linux ptrace 图文详解(六) gdb单步调试

目录 一、gdb单步调试介绍 二、单步调试原理 三、MDSCR_EL1对单步调试的支持、及起作用时机 四、代码实现 五、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders …...

51、项⽬中的权限管理怎么实现的

答&#xff1a;权限管理有三个很重要的模块&#xff1b; (1)⽤⼾模块&#xff1a;可以给⽤⼾分配不同的⻆⾊ (2)⻆⾊模块&#xff1a;可以授于⽤⼾不同的⻆⾊&#xff0c;不同的⻆⾊有不同权限 (3)权限模块&#xff1a;⽤于管理系统中的权限接⼝&#xff0c;为⻆⾊提供对…...

第五章 SQLite数据库:4、SQLite 进阶用法:常见的约束、PRAGMA 配置、数据操作

SQLite PRAGMA PRAGMA 命令用于查询和设置 SQLite 数据库的环境配置&#xff0c;可以帮助管理数据库的行为和性能。 语法 查询 PRAGMA 值&#xff1a; PRAGMA pragma_name;设置 PRAGMA 值&#xff1a; PRAGMA pragma_name value;常见 PRAGMA 示例 1. auto_vacuum Pragma…...

Windows系统安装Boost库

安装Boost库 下载Boost库源码 Boost Downloads 从Boost官方网站下载源码。请访问Boost官网&#xff0c;选择适合您系统的版本进行下载。下载完成后&#xff0c;解压源文件到您选择的目录。 使用Bootstrap脚本准备编译 在Boost源码的根目录下&#xff0c;找到bootstrap.bat文件…...

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

青少年软件编程(Python)等级考试试卷(三级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 学校进行体育跳远期末考试,每人有三次机会,取最远的一次作为最后成绩,1班的成绩如下,CLASS1=[[‘李明’,150,152,147],[‘王红’,146,143,146],[‘刘岩’,148,152,150],[…...

Git 解决“Filename too long”问题

在 Windows 系统中使用 Git 时&#xff0c;遇到 Filename too long 错误通常是由于系统默认的路径长度限制&#xff08;260 字符&#xff09;导致的。以下是综合多种场景的解决方案&#xff1a; 一、快速解决方法 启用 Git 长路径支持 通过 Git 配置命令允许处理超长文件名&am…...

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_自定义单元格大小示例(CalendarView01_07)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

麦科信汽车诊断示波器在机车维修领域中的应用实例

麦科信汽车诊断示波器在机车维修领域中的应用实例 “Micsig SATO1004的错误帧统计功能与历史波形存储&#xff0c;让我们在诊断间歇性CAN故障时有了决定性武器。这不仅是工具升级&#xff0c;更是维修理念的革新。” — Ian Coffey, Mototek技术总监&#xff08;欧洲ECU诊…...

Zookeeper 概述

Zookeeper 概述 Zookeeper 概述与使用指南什么是Zookeeper&#xff1f;Zookeeper的主要作用使用Zookeeper的框架典型使用场景1. 配置管理2. 分布式锁3. 服务注册与发现 Zookeeper的缺陷与其他协调服务的比较实际案例&#xff1a;Kafka使用Zookeeper最佳实践 Zookeeper 概述与使…...

leetcode 188. Best Time to Buy and Sell Stock IV

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析明确并理解递推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这道题把第123题推广为一…...