react 学习 —— 15、使用 ref 引用值

什么时候使用 ref?

当你希望组件"记住"某些信息,但又不想让这些信息 触发新的渲染 时,你可以使用 ref 。以下是使用的几个场景:

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

怎么使用 ref?

1、引入 ref。

javascript 复制代码
import { useRef } from 'react';

2、在你的组件内,调用 useRef Hook 并传入你想要引用的初始值作为唯一参数。

javascript 复制代码
const ref = useRef(0);

3、useRef 返回一个这样的对象:

javascript 复制代码
{ 
  current: 0 // 你向 useRef 传入的值
}

4、你可以用 ref.current 属性访问该 ref 的当前值。这个值是有意被设置为可变的,意味着你既可以读取它也可以写入它。

javascript 复制代码
ref.current = 3;

useRef 内部是如何运行的?

原则上 useRef 可以在 useState 的基础上 实现。 你可以想象在 React 内部,useRef 是这样实现的:

javascript 复制代码
// React 内部
function useRef(initialValue) {
  const [ref, unused] = useState({ current: initialValue });
  return ref;
}

第一次渲染期间,useRef 返回 { current: initialValue }。 该对象由 React 存储,因此在下一次渲染期间将返回相同的对象。 请注意,在这个示例中,state 设置函数没有被用到。它是不必要的,因为 useRef 总是需要返回相同的对象!

ref 和 state 的不同之处

ref state
useRef (initialValue) 返回 { current: initialValue } useRef(initialValue) 返回 { current: initialValue }
更改时不会触发重新渲染 更改时触发重新渲染
可变 ------ 你可以在渲染过程之外修改和更新 current 的值。 "不可变" ------ 你必须使用 setState 设置函数来修改 state 变量,从而排队重新渲染。
在渲染期间读取(或写入) current 值页面不会改变。 你可以随时读取 state。但是,每次渲染都有自己不变的 state 快照。
相关推荐
Moon里1 小时前
【React】什么是 Hook
react.js
涵信1 小时前
第九节:React HooksReact 18+新特性-React 19的use钩子如何简化异步操作?
前端·javascript·react.js
vvilkim2 小时前
React 组件类型详解:类组件 vs. 函数组件
前端·javascript·react.js
JiangJiang2 小时前
🧠 useMemo + memo + useContext 性能优化实战:从无感重渲染到丝滑体验
前端·react.js·面试
Haduo丶3 小时前
100 行代码实现 react keep alive 功能
前端·react.js
程序员小续6 小时前
useContext 用法全解析:3 个实战案例带你上手!
前端·react.js·面试
进取星辰7 小时前
6、事件处理法典:魔杖交互艺术——React 19 交互实现
前端·react.js·交互
bigyoung9 小时前
arco design form表单自定义校验空值时注意事项
javascript·react.js
小钰能吃三碗饭9 小时前
第十篇:【React SSR 与 SSG】服务端渲染与静态生成实战指南
前端·react.js·next.js
键指江湖10 小时前
React 对state进行保留和重置
javascript·react.js·ecmascript