[React] useRef用法和特性

这篇具有很好参考价值的文章主要介绍了[React] useRef用法和特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[React] useRef用法和特性

useRef 与 useState 的区别

一般在使用react-hook的时候,我们用到最多的就是定义变量,以及对应的修改变量
下面是一个最基本的 react-hook 应用程序

const Home = () => {
	const [username, setUserName] = useState('');
	
	return<input 
			value={username}
			onChange={(e) => setUserName(e.target.value)}
		/>}

以上并不是以使用useState的方式来进行对useRef的衬托,两者功能是不同的,只是便于区分


但是如果我想让浏览器渲染的时候,让他的次数自增,这样就会有一些意想不到的隐患…
如下代码所示,当我使用 useEffect 钩子进行input值渲染的时候,他的状态会发生改变,然后又会重新渲染,状态又重新改变,于是就这样无限循环下去…

const Home = () => {
	const [username, setUserName] = useState('');
	
	useEffect(() => { // useEffect 页面渲染时所调用的钩子
		setUserName(username => username + 1);
	}, [username])
	
	return<input 
			value={username} // 循环...循环...循环
		/>}

useRef 的 用法以及特性


介绍: useRef 是一个 React Hook,它能让你引用一个不需要渲染的值。

使用 useRef 可以返回一个只有一个属性的对象: current,从一开始,他会是你传递的 initial Value, 之后,如果你需要,可以修改它(ref.current), 如果或他是一个需要你渲染的对象,那么你将不应该去修改它。

这可能会让你想起 useState,但是useRef是可变的, useRef值不会触发react渲染机制, 因为它本身就是一个再普通不过的javascript对象。这意味着 ref 是存储一些不影响组件视图输出的信息的完美选择!


官方文档注意:
除了 初始化 外不要在渲染期间写入 或者读取 ref.current。这会使你的组件的行为不可预测。

在严格模式下,React 将会 调用两次组件方法,这是为了 帮助你发现意外的问题。这只是开发模式下的行为,不影响生产模式。每个 ref 对象将会创建两次,但是其中一个版本将被丢弃。如果你的组件函数是纯的(应该如此),这不会影响其行为。


useRef(initialValue)
在你组件的顶层调用 useRef 声明一个 ref。

import React, { useRef } from 'react'

const useRefTest = () => {
   const pNum = useRef(0)
   ...
}

useRef 会返回单个 current

current: 0

通过使用 ref,你可以确保:

  • 你可以在重新渲染之间 存储信息(不像是普通对象,每次渲染都会重置)。
  • 改变它 不会触发重新渲染(不像是 state 变量,会触发重新渲染)。
  • 对于你的组件的每个副本来说,这些信息都是本地的(不像是外面的变量,是共享的)。

通过 ref 操作 DOM

使用 ref 操作 DOM 是非常常见的。React 内置了对它的支持。

首先,声明一个 initial value 为 null 的 ref 对象

import React, { useRef } from 'react'

const test = () => {
  const defaultDom = useRef(null)
}

然后将你的 ref 对象作为 ref 属性传递给你想要操作的 DOM 节点的 JSX

import React, { useRef } from 'react'

const test = () => {
  const defaultDom = useRef(null)

  return (
  <>
	 <input ref={defaultDom} />
	 <button onClick={handleClick}>foucs the input!</button>
  </>
  )
}

当 React 创建 DOM 节点并将其渲染到屏幕时,React 将会把 DOM 节点设置为你的 ref 对象的 current 属性。现在你可以访问 的 DOM 节点,并且可以调用类似于 focus() 的方法 (获取input输入框的焦点):

  const handleClick = () => {
    defaultDom.current.focus()
  }

[React] useRef用法和特性文章来源地址https://www.toymoban.com/news/detail-428292.html

更多请参考官方文档!

到了这里,关于[React] useRef用法和特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • react中useRef的应用

    useRef是随着react函数式组件发展而来的,是react众多官方hook中的一个,调用useRef可以返回一个伴随这组件整个声明周期不发生改变的对象,这个对象常见的用途有两个: 用于绑定dom元素,从而实现对dom元素的操作 用于保存不希望随着组件重新渲染而改变的值,如定时器 我在

    2024年02月06日
    浏览(59)
  • React-Hooks----useRef()

    用于创建对DOM元素的引用。它还可以用于存储组件之间共享的变量,这些变量不会在组件重新渲染时发生更改。 useRef() 可以接收一个初始值,返回一个包含 current 属性的对象,这个属性可以存储任意可变值,而且当修改它时不会重新渲染组件。 useRef() 的常见用法包括: 访问

    2023年04月09日
    浏览(34)
  • React hooks文档笔记(四) useRef

    当想让组件记住一些信息,又不想触发新的渲染,可以使用ref:总是返回同一个对象。 1. state 和 refs 的比较 refs(普通的 JavaScript 对象) state 更改时 不触发重新渲染 更改时 触发重新渲染 可变的——修改/更新 current ’s value (修改完立即生效  ref.current = 5;    console.log(ref

    2024年02月12日
    浏览(42)
  • 浅谈React中的ref和useRef

    目录 什么是useRef? 使用 ref 访问 DOM 元素 Ref和useRef之间的区别 Ref和useRef的使用案例 善用工具 结论 在各种  JavaScript  库和框架中, React  因其开发人员友好性和支持性而得到认可。 大多数开发人员发现  React  非常舒适且可扩展,因为它提供了钩子。钩子是  React  附带的

    2024年02月14日
    浏览(30)
  • React钩子函数之useRef的基本使用

    React钩子函数中的useRef是一个非常有用的工具,它可以用来获取DOM元素或者保存一些变量。在这篇文章中,我们将会讨论useRef的基本使用。 首先,我们需要知道useRef是如何工作的。它返回一个可变的ref对象,这个对象可以在组件的整个生命周期中被访问。当我们需要获取DOM元

    2024年02月10日
    浏览(35)
  • 3.react useRef使用与常见问题

    https://zh-hans.legacy.reactjs.org/docs/hooks-faq.html#why-am-i-seeing-stale-props-or-state-inside-my-function

    2024年02月12日
    浏览(43)
  • react 之 useState

    参考:https://blog.csdn.net/Ljwen_/article/details/125319191 一、基本使用 useState是 react 提供的一个定义响应式变量的 hook 函数,基本语法如下: 它返回一个状态和一个修改状态的方法,状态需要通过这个方法来进行修改; initialCount 是我们传入的一个初始状态,它是惰性的,我们可以

    2023年04月23日
    浏览(36)
  • react之useState详解

    它是React 16.8 的新特性,我们在React里面一般都是用Class去写组件,但是有时候会发现不用它更方便,但是问题来了: 不用Class的时候,数据的状态改变如何存储呢? 如果你用 var,let,const 等等,你会发现:值虽然改变了,但是页面并没有重新渲染,也就是说, 这些定

    2024年04月25日
    浏览(35)
  • React 使用 useRef() 获取循环中所有子组件实例

    之前项目中使用了 antd pro 中的 可编辑表格 (EditableProTable) ,在页面中表格要经过多层遍历后组成的新页面,所以我将之抽成了一个公用的组件,另外在遍历的最外层需要通过一个按钮统一提交表格数据,但是提交数据之前需要对每一个表格进行非空校验。 遍历中引入组件这

    2024年02月11日
    浏览(34)
  • React -- useState使用方法

    userState 是一个React Hook (函数)。它允许我们向组件添加一个状态变量,从而控制影响组件的渲染结果 1. useState是一个函数,返回值是一个数组 2. 数组中第一个参数是状态变量,第二个参数是set开头的函数名,用于修改变量 3. useState的参数作为count的初始值 4.使用举例

    2024年02月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包