React-Hooks-useRef

简介: React-Hooks-useRef

useRef Hook 概述


  • useRef 就是 createRef 的 Hook 版本, 只不过比 createRef 更强大一点

首先先来看 createRef 获取,代码如下:

import React, {createRef} from 'react';
class Home extends React.PureComponent {
    render() {
        return (
            <div>Home</div>
        )
    }
}
function About() {
    return (
        <div>About</div>
    )
}
function App() {
    const pRef = createRef();
    const homeRef = createRef();
    function btnClick() {
        console.log(pRef.current);
        console.log(homeRef.current);
    }
    return (
        <div>
            <p ref={pRef}>我是段落</p>
            <Home ref={homeRef}/>
            <About/>
            <button onClick={() => {
                btnClick()
            }}>获取
            </button>
        </div>
    )
}
export default App;


在看通过 useRef 获取:

import React, {useRef} from 'react';
class Home extends React.PureComponent {
    render() {
        return (
            <div>Home</div>
        )
    }
}
function About() {
    return (
        <div>About</div>
    )
}
function App() {
    const pRef = useRef();
    const homeRef = useRef();
    function btnClick() {
        console.log(pRef.current);
        console.log(homeRef.current);
    }
    return (
        <div>
            <p ref={pRef}>我是段落</p>
            <Home ref={homeRef}/>
            <About/>
            <button onClick={() => {
                btnClick()
            }}>获取
            </button>
        </div>
    )
}
export default App;


通过两次的运行之后,可以发现都是可以获取到的。




createRef 和 useRef 的区别


  • useRef 除了可以用来获取元素以外, 还可以用来保存数据

首先我们分别使用两个不同的 Ref 来获取一下元素,然后在把对应的元素打印出来查看结果:

import React, {useRef, createRef} from 'react';
class Home extends React.PureComponent {
    render() {
        return (
            <div>Home</div>
        )
    }
}
function About() {
    return (
        <div>About</div>
    )
}
function App() {
    const pRef = createRef();
    const homeRef = useRef();
    function btnClick() {
        console.log(pRef);
        console.log(homeRef);
    }
    return (
        <div>
            <p ref={pRef}>我是段落</p>
            <Home ref={homeRef}/>
            <About/>
            <button onClick={() => {
                btnClick()
            }}>获取
            </button>
        </div>
    )
}
export default App;


可以发现两个元素对象当中都有一个 current 属性,当中保存的就是对应的元素信息,那么就下来就可以演示存储数据这么一个特点,在 useRef 创建的时候是可以传递一个数据的如下:

那么博主也跟着传递一下,然后在查看创建出来的元素是怎样的:

发现 current 属性保存的就是我们传递的初始值,然后我们可以进行使用:

function App() {
    const pRef = createRef();
    const homeRef = useRef(18);
    function btnClick() {
        console.log(pRef);
        console.log(homeRef);
    }
    return (
        <div>
            <p>{homeRef.current}</p>
            <p ref={pRef}>我是段落</p>
            <Home ref={homeRef}/>
            <About/>
            <button onClick={() => {
                btnClick()
            }}>获取
            </button>
        </div>
    )
}

那么 useRef 也可以进行存储数据那么在前面所说的 state 也可以存储数据他们之间又有什么区别呢?




useState 和 useRef 的区别


  • useRef 中保存的数据,除非你手动的进行修改,否则永远都不会发生变化

改造一下如上示例:

import React, {useState, useRef, useEffect} from 'react';
export default function App() {
    const [numState, setNumState] = useState(0);
    const age = useRef(numState);
    useEffect(() => {
        age.current = numState;
    }, [numState]);
    return (
        <div>
            <p>上一次的值:{age.current}</p>
            <p>当前的值:{numState}</p>
            <button onClick={() => {
                setNumState(numState + 1);
            }}>增加
            </button>
        </div>
    )
}

如上的示例就是说你如果想要知道你上一次的值就可以利用 useRef 的传参来实现,因为如果你不去修改他他是不会发生改变的,我们通过 useEffect 然后依赖于 numState 增加完成之后在重新给 age 赋值这样就可以知道我们上一次的值。




最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL标准版:低成本高性能的数据库解决方案
PolarDB MySQL标准版:低成本高性能的数据库解决方案 随着数字化时代的到来,企业对于数据处理的需求越来越高,而数据库作为数据处理的核心,其性能和成本成为了企业关注的焦点。阿里云全新推出的PolarDB MySQL标准版,以全新的架构和优化,为企业提供了高性能、低成本的数据库解决方案。
287 2
|
消息中间件 监控 数据挖掘
NineData:从Kafka到ClickHouse的数据同步解决方案
NineData 提供了强大的数据转换和映射功能,以解决 Kafka 和 ClickHouse 之间的格式和结构差异,确保数据在同步过程中的一致性和准确性。
694 2
NineData:从Kafka到ClickHouse的数据同步解决方案
|
SQL 关系型数据库 MySQL
MySQL 事务详解
在数据库管理中,事务是一组SQL语句的执行单元,它们被视为一个整体。事务的主要目标是保持数据库的一致性和完整性,即要么所有SQL语句都成功执行,要么所有SQL语句都不执行。在MySQL中,事务起到了非常重要的作用,特别是在需要确保数据的完整性和一致性的应用程序中。 本文将详细介绍MySQL事务的概念、特性、隔离级别、事务的控制和示例代码等内容,以帮助您更好地理解和应用MySQL事务。
485 2
|
12月前
|
人工智能 分布式计算 大数据
超级计算与大数据:推动科学研究的发展
【9月更文挑战第30天】在信息时代,超级计算和大数据技术正成为推动科学研究的关键力量。超级计算凭借强大的计算能力,在尖端科研、国防军工等领域发挥重要作用;大数据技术则提供高效的数据处理工具,促进跨学科合作与创新。两者融合不仅提升了数据处理效率,还推动了人工智能、生物科学等领域的快速发展。未来,随着技术进步和跨学科合作的加深,超级计算与大数据将在科学研究中扮演更加重要的角色。
|
11月前
|
运维 物联网 5G
5G网络的多接入技术融合:构建无缝通信未来
5G网络的多接入技术融合:构建无缝通信未来
409 4
|
缓存 网络协议 安全
揭秘浏览器背后的神秘之旅:一网打尽HTTP请求流程,让你网络冲浪更顺畅!
【8月更文挑战第31天】当在浏览器中输入网址并按下回车键时,一系列复杂的HTTP请求流程随即启动。此流程始于DNS解析,将域名转化为IP地址;接着是与服务器的TCP三次握手建立连接。连接建立后,浏览器发送HTTP请求,其中包含请求方法、资源及版本等信息。服务器接收请求并处理后返回HTTP响应,包括状态码、描述及页面内容。浏览器解析响应,若状态码为200则渲染页面,否则显示错误页。整个流程还包括缓存处理和HTTPS加密等步骤,以提升效率和保障安全。理解该流程有助于更高效地利用网络资源。通过抓包工具如Wireshark,我们能更直观地观察和学习这一过程。
189 4
|
JavaScript 前端开发 小程序
CoderGuide 程序员前后端面试题库,打造全网最高质量题库
CoderGuide涵盖范围包括且不限于:前端面试题(Vue,React,JS,HTTP,HTML,CSS面试题等),后端面试题(Java,Python,Golang,PHP,Linux,Mysql面试题等),以及算法面试题,大厂面试题,高频面试题,校招面试题等,你想要的,这里都有!
247 2
|
存储 算法 数据可视化
LeetCode 133题详解:广度优先搜索和深度优先搜索实现克隆图
LeetCode 133题详解:广度优先搜索和深度优先搜索实现克隆图
|
测试技术 API UED
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
343 1