React中useRef的具体使用

 更新时间:2021年04月13日 10:37:38   作者:Meskjei  
这篇文章主要介绍了React中useRef的具体使用,它可以用来获取组件实例对象或者是DOM对象,除此之外还有哪些用法,就一起来了解一下

相信有过React使用经验的人对ref都会熟悉,它可以用来获取组件实例对象或者是DOM对象。

而useRef这个hooks函数,除了传统的用法之外,它还可以“跨渲染周期”保存数据。

首先来看一下它传统的用法:

import React, { useState, useEffect, useMemo, useRef } from 'react';

export default function App(props){
  const [count, setCount] = useState(0);

  const doubleCount = useMemo(() => {
    return 2 * count;
  }, [count]);

  const couterRef = useRef();

  useEffect(() => {
    document.title = `The value is ${count}`;
    console.log(couterRef.current);
  }, [count]);
  
  return (
    <>
      <button ref={couterRef} onClick={() => {setCount(count + 1)}}>Count: {count}, double: {doubleCount}</button>
    </>
  );
}

代码中用useRef创建了couterRef对象,并将其赋给了button的ref属性。这样,通过访问couterRef.current就可以访问到button对应的DOM对象。

然后再来看看它保存数据的用法。

在一个组件中有什么东西可以跨渲染周期,也就是在组件被多次渲染之后依旧不变的属性?第一个想到的应该是state。没错,一个组件的state可以在多次渲染之后依旧不变。但是,state的问题在于一旦修改了它就会造成组件的重新渲染。

那么这个时候就可以使用useRef来跨越渲染周期存储数据,而且对它修改也不会引起组件渲染。

import React, { useState, useEffect, useMemo, useRef } from 'react';

export default function App(props){
  const [count, setCount] = useState(0);

  const doubleCount = useMemo(() => {
    return 2 * count;
  }, [count]);

  const timerID = useRef();
  
  useEffect(() => {
    timerID.current = setInterval(()=>{
        setCount(count => count + 1);
    }, 1000); 
  }, []);
  
  useEffect(()=>{
      if(count > 10){
          clearInterval(timerID.current);
      }
  });
  
  return (
    <>
      <button ref={couterRef} onClick={() => {setCount(count + 1)}}>Count: {count}, double: {doubleCount}</button>
    </>
  );
}

在上面的例子中,我用ref对象的current属性来存储定时器的ID,这样便可以在多次渲染之后依旧保存定时器ID,从而能正常清除定时器。

到此这篇关于React中useRef的具体使用的文章就介绍到这了,更多相关React useRef内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React中遍历数组生成标签问题

    React中遍历数组生成标签问题

    这篇文章主要介绍了React中遍历数组生成标签问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • React 脚手架配置代理完整指南(最新推荐)

    React 脚手架配置代理完整指南(最新推荐)

    本文详细介绍了React脚手架配置代理的多种方式,文章还讨论了常见问题的解决方案,如跨域问题、WebSocket代理和错误处理,并提供了生产环境配置建议和调试技巧,感兴趣的朋友一起看看吧
    2024-12-12
  • react antd表格中渲染一张或多张图片的实例

    react antd表格中渲染一张或多张图片的实例

    这篇文章主要介绍了react antd表格中渲染一张或多张图片的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • React实现模糊搜索和关键字高亮的示例代码

    React实现模糊搜索和关键字高亮的示例代码

    这篇文章主要为大家详细介绍了React如何实现模糊搜索和关键字高亮的效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • 详解React项目中eslint使用百度风格

    详解React项目中eslint使用百度风格

    这篇文章主要介绍了React项目中eslint使用百度风格,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • React中setState同步异步场景的使用

    React中setState同步异步场景的使用

    本文主要介绍了React中setState同步异步场景的使用,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Antd react上传图片格式限制的实现代码

    Antd react上传图片格式限制的实现代码

    这篇文章主要介绍了Antd react上传图片格式限制的实现代码,本文通过实例代码图文效果给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-12-12
  • React为 Vue 引入容器组件和展示组件的教程详解

    React为 Vue 引入容器组件和展示组件的教程详解

    这篇文章主要介绍了React为 Vue 引入容器组件和展示组件的教程详解,文中很详细的给大家介绍了使用容器组件的原因,需要的朋友可以参考下
    2018-05-05
  • react hooks中的useState使用要点

    react hooks中的useState使用要点

    这篇文章主要为大家介绍了react hooks中的useState使用要点详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 关于React Native使用axios进行网络请求的方法

    关于React Native使用axios进行网络请求的方法

    axios是一个基于Promise的Http网络库,可运行在浏览器端和Node.js中,Vue应用的网络请求基本都是使用它完成的。这篇文章主要介绍了React Native使用axios进行网络请求,需要的朋友可以参考下
    2021-08-08

最新评论