【发布时间】:2020-06-18 15:05:30
【问题描述】:
查看 hooks 文档和一些博客,我们了解到在使用 useRef() 时,我们存储了一个可变值。
Docs:
您可能熟悉 refs 主要是作为访问 DOM 的一种方式。如果你通过 ref 将 ref 对象传递给 React,React 会在相应 DOM 节点发生变化时将其 .current 属性设置为相应的 DOM 节点。
不过,useRef() 的用处不止是 ref 属性。它可以方便地保留任何可变值,类似于在类中使用实例字段的方式。
这是可行的,因为 useRef() 创建了一个普通的 JavaScript 对象。 useRef() 和自己创建 {current: ...} 对象之间的唯一区别是 useRef 会在每次渲染时为您提供相同的 ref 对象。
与仅使用 let 声明和使用变量相比,这给我们带来了哪些优势?
代码示例:
import React, {useRef} from "react";
const MyFunctionalComponent = (props) => {
const refVariable = useRef('value');
//versus
let letVariable = 'value';
}
跟进: 给出的答案很有帮助,并结合一些测试给了我所需的理解。如果有人遇到这个概念有问题,我现在的理解是:
- 您可以拥有实例变量,但它们确实是即时的,并且每次重新渲染都会重新初始化它们。
- useRef() 为您提供更永久的东西,例如 useState() 但更新不会触发重新渲染,如果您以链接方式进行大量操作但不想触发重新渲染,这非常有用-渲染到最后
- useState() 应该只与 UI 元素使用的变量相关联,因为任何状态更改都会触发整个组件的重新渲染。在整个过程中不要有一系列操作状态的操作,请使用 refs 直到链的末尾。
【问题讨论】:
-
您的意思是在组件外部使用带有
let的变量吗?如有必要,请举例说明。 -
@stackoverflow-newbie:我添加了一个我要问的最小示例,但我认为 Jayce444 有我需要的答案。
标签: reactjs react-hooks