使用useRef()而不是仅仅声明一个变量的优点是什么



查看hooks文档和一些博客,我们了解到当使用useRef((时,我们存储了一个可变的值。

文件:

您可能熟悉refs,它主要是作为访问DOM的一种方式。如果将ref对象传递给React,React将在相应的DOM节点发生更改时将其.current属性设置为该节点。

但是,useRef((除了用于ref属性之外,还可以用于其他用途。它可以方便地保持任何可变值,类似于在类中使用实例字段的方式。

这是因为useRef((创建了一个纯JavaScript对象。useRef((和自己创建{current:…}对象之间的唯一区别是,useRef将在每次渲染时为您提供相同的ref对象。

与只声明和使用带有let的变量相比,这给我们带来了什么优势?

代码ex:

import React, {useRef} from "react";
const MyFunctionalComponent = (props) => {
const refVariable = useRef('value');
//versus
let letVariable = 'value';
}

跟进:给出的答案很有帮助,再加上一些测试,我得到了所需的理解。如果有人遇到这个概念有问题,我现在的理解方式是:

  • 可以有实例变量,但它们确实是即时的,每次重新渲染都会重新初始化它们
  • useRef((为您提供了更持久的功能,如useState((,但更新不会触发重新渲染,如果您正在以链接方式进行大量操作,但直到最后都不想触发重新渲染则非常有用
  • useState((应该只绑定到UI元素使用的变量,因为状态的任何更改都会触发整个组件的重新呈现。不要有一系列操作过程中的状态,使用refs直到链的末端

最后一句话描述得很清楚:

useRef将在每次渲染时为您提供相同的ref对象。

如果您自己声明一个简单的javascript变量,它将在每次渲染时更新。当您需要在重新渲染期间保持某些值时,会使用ref(除了使用ref属性进行DOM节点引用之外(

我正在改变我的答案,并将人们推荐给下面的Arman,因为这是一个更合适的答案。本质上,对于功能组件,整个函数在每次重新渲染时都会运行。这意味着在函数体中使用简单let x = 5;初始化的变量将在每次渲染时重新初始化,并重置它们。这就是我们需要像useRef这样的钩子的原因,它为在渲染之间持续存在的值提供了引用

相关内容

  • 没有找到相关文章

最新更新