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

React ref 和 JS 对象的区别

✅ React 中的 ref 是什么?

在 React 中,ref(Reference) 是用来:

在不通过 state 的情况下,引用 DOM 或保存某个可变值 的机制。


🆚 React ref 和普通 JS 对象的区别

特性React ref普通 JS 对象 {}
是否响应式❌ 不是响应式(修改后不会引发 re-render)❌ 同样不是
用于持久化跨渲染值✅ 是(值在多次 render 中保持不变)❌ 不会(组件每次 render 都重新构造)
能否挂载到 DOM 元素✅ 可以通过 ref={myRef} 挂载 DOM❌ 不行
生命周期内是否共享✅ 是❌ 否,每次 render 都会新建

📌 示例:普通 JS 对象的问题

function MyComponent() {const counter = { current: 0 };const handleClick = () => {counter.current++;console.log(counter.current);};return <button onClick={handleClick}>Click</button>;
}

问题: 每次 render,counter 都是新对象,值不会保留。


✅ 使用 useRef 正确方式

import { useRef } from "react";function MyComponent() {const counter = useRef(0); // 保持跨 render 持久const handleClick = () => {counter.current++;console.log(counter.current);};return <button onClick={handleClick}>Click</button>;
}
  • useRef() 返回一个 { current: ... } 对象。
  • 这个对象在整个组件生命周期内不会变化(就像是“盒子”)。
  • 改变 ref.current 不会触发组件重新渲染。

✅ 用途总结

用途示例说明
💡 持久保存可变数据(跨渲染)比如计时器 ID、上次滚动位置、旧的 props 等
🎯 获取真实 DOM 节点<div ref={myRef} /> 获取 DOM
🧠 存储函数引用防止闭包陷阱、绑定旧变量
🔥 不想触发渲染的缓存值用来做性能优化

✅ 示例:获取 DOM 节点

function InputFocus() {const inputRef = useRef(null);const handleClick = () => {inputRef.current.focus();  // 直接操作 DOM};return (<><input ref={inputRef} /><button onClick={handleClick}>Focus</button></>);
}

❗注意事项

  • 修改 ref.current 不会触发组件更新(不像 useState)。
  • 不要试图监听 ref.current 的变化,ref 不是响应式系统。
  • 不适合替代 state 做 UI 展示用途。

✅ 总结一句话

🔧 useRef 是一个不会因为组件重新渲染而重置的可变容器,适合保存 DOM 引用或临时变量。


相关文章:

  • 大神自己做的下载音乐的网站产品推广思路
  • 商城网站栏目代理推广
  • 廊坊做网站多少钱如何关闭2345网址导航
  • 做网站方面的问题深圳全网推广公司
  • 试玩平台网站怎么做如何在百度上发广告
  • 自建网站该页无法显示优帮云排名优化
  • nohup选项对jenkins web连接稳定行影响分析总结
  • 【CUDA调优指南】缓存访存流程
  • 鸿蒙容器组件 ColumnSplit 与 RowSplit解析:动态分割布局指南
  • Three.js项目实战:从零搭建小米SU7三维汽车
  • 服务器性能优化通用方案
  • .NET 依赖注入(DI)全面解析
  • Ubuntu下交叉编译工业相机库aravis到OpenHarmony(aarch64)使用
  • GaussDB实例级自动备份策略:构建数据安全的“自动防护网”
  • 终止分区表变更操作时误删数据字典缓存导致MySQL崩溃分析
  • 卡萨帝发布AI深度科技:实现从守护生活到守护文明的升级
  • 人生笔记Real:记录生活点滴,守护珍贵记忆
  • MiniMax-M1混合MoE大语言模型(本地运行和私有化搭建)
  • 微服务思想与C++服务化框架
  • Hadoop之HDFS
  • DeepSeek在数据分析与科学计算中的革命性应用
  • 实战使用 Docker Compose 搭建 Redis Cluster 集群
  • 盖雅工场 2025 香港 SAP NOW 大会深度解析:AI 重构亚太劳动力管理数字化生态
  • Tauri(2.5.1)+Leptos(0.8.2)开发自用桌面小程序--DeepSeek辅助编程(俄罗斯方块)
  • 自用006
  • 单片机常用通信外设特点及通信方式对比表