当前位置: 首页 > 面试题库 >

反应:useState或useRef?

干浩阔
2023-03-14
问题内容

我读约阵营useState(),并useRef()在“ 鱼钩常见问题解答 ”,我糊涂了关于一些使用案例,似乎有useRef和useStatehtml" target="_blank">解决方案的同时,我不知道哪条路是正确的方式。

从关于useRef()的“挂钩常见问题”中:

“ useRef()钩不仅用于DOM引用。“ ref”对象是通用容器,其当前属性是可变的,并且可以保存任何值,类似于类的实例属性。”

使用 useRef()

function Timer() {
  const intervalRef = useRef();

  useEffect(() => {
    const id = setInterval(() => {
      // ...
    });
    intervalRef.current = id;
    return () => {
      clearInterval(intervalRef.current);
    };
  });

  // ...
}

使用 useState()

function Timer() {
  const [intervalId, setIntervalId] = useState(null);

  useEffect(() => {
    const id = setInterval(() => {
      // ...
    });
    setIntervalId(id);
    return () => {
      clearInterval(intervalId);
    };
  });

  // ...
}

这两个示例将具有相同的结果,但是哪个示例更好-为什么?


问题答案:

两者之间的主要区别是:

useState导致重新渲染,useRef不会。

它们之间的共同点是两者,useState并且useRef在重新渲染后可以记住它们的数据。因此,如果您的变量是决定视图图层渲染的变量,请使用useState。其他用途useRef

我建议阅读这篇文章。



 类似资料:
  • 问题内容: 在带有钩子的React中,更新状态的正确方法是嵌套对象是什么? 一个人怎么会使用到的更新来(附加一个字段)? (改变价值)? 问题答案: 您可以像这样传递新值

  • 考虑规范的示例: 单击按钮使每个状态打印两次。为什么呢?

  • 我在React hook中遇到了一些非常奇怪的行为。在下面的代码中(https://codesandbox.io/s/purple-bush-nb5uy?file=/src/index.js): 单击时,我们在控制台中获得以下序列: 我希望: 因为我认为如果React找到setter并在重新渲染后执行以下代码,它会立即重新渲染。此外,我的React应用程序也是如此: 当运行以及值与状态变量的内容不

  • 为什么使用状态自动更新?我将按下按钮,不显示文本输入。但是我可以保存文件而不改变。文本输入将显示。对不起,我的英语不好 从“React”导入React,{useState,useffect};从“react native”导入{Text,TextInput,View,Button,};

  • 我有一个函数,它运行验证并根据检查结果设置状态变量。我需要通过API调用传递要上传的变量。 我的问题是状态变量没有更新,当我需要在api调用中传递更新的变量时,状态变量正在以初始状态(null)传递。 我该如何着手解决这个问题? 现行代码 更新的代码正在运行

  • useState 接受初始状态作为参数,返回 stateful (有状态) 值,以及更新这个状态值的函数。它可以接受一个回调函数,该回调函数将获取当前状态作为参数。 每次调用 useState 都与一个组件配对,可以在一个函数组件内多次调用 useState 来获取多个独立的状态值。因为返回的setState的作用域不是单个组件,所以我们可以定义独立于组件的有状态行为。 在初始渲染的时候,返回的状