P09:useRef获取DOM元素和保存变量

阐述

useRef 在工作中虽然用的不多,但是也不能缺少。
它有两个主要的作用:

1、用 useRef 获取 React JSX 中的DOM元素,获取后你就可以控制DOM的任何东西了。
但是一般不建议这样来做,React界面的变化可以通过状态来控制。

2、用 useRef 来保存变量,这个在工作中也很少能用到,我们有了 useContext 这样的保存其实意义不大,但是这是学习,也要把这个特性讲一下。

useRef 获取DOM元素

界面上有一个文本框,在文本框的旁边有一个按钮,当我们点击按钮时,在控制台打印出input的DOM元素,并进行复制到DOM中的value上。

这一切都是通过useRef来实现。

/src 文件夹下新建一个 Example9.js 文件,然后先引入 useRef,
编写业务逻辑代码如下:

ReactHooksDemo\demo01\src\Example9.js

import React, { useRef} from 'react';

function Example9(){
    const inputEl = useRef(null)
    const onButtonClick=()=>{ 
        inputEl.current.value="Hello ,willem"
        console.log(inputEl) //输出获取到的DOM节点
    }
    return (
        <>
            {/*保存input的ref到inputEl */}
            <input ref={inputEl} type="text"/>
            <button onClick = {onButtonClick}>在input上展示文字</button>
        </>
    )
}

export default Example9

当点击按钮时,你可以看到在浏览器中的控制台完整的打印出了DOM的所有东西,并且界面上的<input/>框的value值也输出了我们写好的Hello ,willem。

这一切说明我们可以使用useRef获取DOM元素,并且可以通过useRef控制DOM的属性和值。

在这里插入图片描述

useRef 保存普通变量

这个操作在实际开发中用的并不多,但我们还是要讲解一下。

就是useRef可以保存React中的变量。

我们这里就写一个文本框,文本框用来改变text状态。

又用 useRef 把 text 状态进行保存,最后打印在控制台上。

写这段代码你会觉的很绕,其实显示开发中没必要这样写,用一个state状态就可以搞定,这里只是为了展示知识点。

接着用useState声明了一个text状态和setText函数。

然后编写界面,界面就是一个文本框。

然后输入的时候不断变化。

ReactHooksDemo\demo01\src\Example10.js

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

function Example10(){
    const inputEl = useRef(null)
    const onButtonClick=()=>{ 
        inputEl.current.value="Hello ,useRef"
        console.log(inputEl)
    }
    const [text, setText] = useState('willem')
    return (
        <>
            {/*保存input的ref到inputEl */}
            <input ref={inputEl} type="text"/>
            <button onClick = {onButtonClick}>在input上展示文字</button>
            <br/>
            <br/>
            <input value={text} onChange={(e)=>{setText(e.target.value)}} />
        </>
    )
}

export default Example10

在这里插入图片描述
这时想每次text发生状态改变,保存到一个变量中或者说是useRef中,这时候就可以使用useRef了。

先声明一个textRef变量,他其实就是useRef函数。

然后使用useEffect函数实现每次状态变化都进行变量修改,并打印。最后的全部代码如下。

在这里插入图片描述

这时候就可以实现每次状态修改,同时保存到useRef中了,也就是我们说的保存变量的功能。那useRef的主要功能就是获得DOM和变量保存,到这儿,相信你的编码能力又增加了一些,加油吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其黑、受其白

喝个咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值