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 快照。
相关推荐
之恒君1 小时前
React 性能优化(方向)
前端·react.js
阿里巴啦2 小时前
从零搭建移动端数字人生成应用:React + Go + D‑ID 实战
react.js·golang·状态模式·数字人·did·ai移动端数字人
泥菩萨^_^3 小时前
【每天认识一个漏洞】React 和 Next.js RCE漏洞
前端·javascript·react.js
一只爱吃糖的小羊3 小时前
React 避坑指南:“闭包陷阱“
前端·javascript·react.js
by__csdn4 小时前
大前端:定义、演进与实践全景解析
前端·javascript·vue.js·react.js·typescript·ecmascript·动画
fruge5 小时前
React Fiber 架构详解:为什么它能解决页面卡顿问题?
前端·react.js·架构
Arvin_Rong6 小时前
回归传统?原生 JS + React 混合开发的实践与思考
javascript·react.js
by__csdn6 小时前
JavaScript性能优化实战:异步与延迟加载全方位攻略
开发语言·前端·javascript·vue.js·react.js·typescript·ecmascript
by__csdn7 小时前
JavaScript性能优化实战:减少DOM操作全方位攻略
前端·javascript·vue.js·react.js·性能优化·typescript
CaptainDrake8 小时前
Fiber 结构和普通 VNode 区别
react.js