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 快照。
相关推荐
梦6502 小时前
React 简介
前端·react.js·前端框架
一只小阿乐2 小时前
react 中的判断显示
前端·javascript·vue.js·react.js·react
光影少年2 小时前
useMemo 和 React.memo区别
前端·react.js·前端框架
小沐°2 小时前
React-页码组件
前端·javascript·react.js
消失的旧时光-19432 小时前
Flutter 与 React/Vue 为什么思想一致?——声明式 UI 体系的深度对比(超清晰版)
vue.js·flutter·react.js
e***U8204 小时前
前端路由懒加载实现,React.lazy与Suspense
前端·react.js·前端框架
terminal0078 小时前
浅谈useRef的使用和渲染机制
前端·react.js·面试
weixin79893765432...10 小时前
React 性能优化
react.js·性能优化
Dontla10 小时前
React Tailwind CSS div布局demo
前端·css·react.js
metaRTC10 小时前
webRTC IPC客户端React Native版编程指南
react native·react.js·ios·webrtc·p2p·ipc