别再用错了!一分钟让你区分 useRef 和 useState

useRefuseState 都是 React 的 Hook,用于在函数组件中保存数据,但二者的用途和行为有明显区别:

  • useState

    • 用于管理需要触发重新渲染的状态数据
    • 状态变化会导致组件重新渲染,视图会更新。
    • 适合保存会影响界面显示的变量(如输入框内容、组件显隐状态等)。
    • 状态更新是异步的,在同一次 render 中无法立即获取最新值。
  • useRef

    • 用于保存不会引起视图重新渲染的可变数据
    • 适合存储 DOM 引用、定时器 ID、前一状态、临时变量等。
    • 数据更新不会触发组件的 rerender,更像是在整个组件生命周期内都可变的"容器" (ref 对象,current 属性持久有效)。
    • 状态更新是同步的,可在当前 render 流程内立即获取新值。
区别 useState useRef
渲染影响 数据变化会引起组件重新渲染 数据变化不会引起组件重新渲染
数据存储方式 返回 状态, 设置函数 返回 ref 对象(通过 .current 获得和设置值)
用途 存放会影响界面显示的状态数据 存放 DOM、定时器、可变临时数据,不影响界面
更新方式 setState 异步更新,无法立即获得最新值 ref.current 同步更新,可立即获得
常用场景 交互状态、表单输入、显隐控制等 获取 DOM、缓存旧值、标记、临时存储中间量等

选择建议

  • 如果数据变化影响 UI,需用 useState
  • 如果只需在渲染间持久保存某个数据且不会影响 UI,用 useRef

注意事项

  • ref.current 的改变不建议作为 useEffectuseMemo 等 hook 的依赖项;
  • useRef 不会参与 React 的响应式更新机制。
相关推荐
AC赳赳老秦19 分钟前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
结网的兔子28 分钟前
【前端开发】Web端迁移至 uni-app 及鸿蒙扩展方案对比
前端·uni-app·harmonyos
水瓶夜之1 小时前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
笨笨狗吞噬者1 小时前
VS Code 内置浏览器打开网页
前端
SamChan901 小时前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
甲维斯2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·人工智能
奈斯先生Vector2 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
海带紫菜菠萝汤2 小时前
FFmpeg.wasm 实践:在浏览器中运行 FFmpeg 的能力边界与性能瓶颈
前端·javascript·ffmpeg·音视频·wasm
名字还没想好☜2 小时前
React 受控输入框光标跳到末尾:格式化输入时的 selection 丢失 bug 与修复
前端·javascript·react.js·bug·react·next.js
Access开发易登软件2 小时前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access