react中createRef和useRef的区别

简介: 之前的一篇文章给大家介绍过react中ref的使用方法,其中详细介绍了useRef的使用,这篇文章给大家介绍一个新的东西——useRef,来看看他们有什么不同

前言

之前的一篇文章给大家介绍过react中ref的使用方法,其中详细介绍了useRef的使用,点击链接查看:
react中ref使用方法解析。这篇文章给大家介绍一个新的东西——useRef,来看看他们有什么不同

useRef

为了方便进行对比,下面例子使用useRef和useRef:
1.分别使用useRef和useRef创建两个input输入框,并打印对应的值
2.在useEffect中对这两个输入框的信息进行打印

import React, { createRef, useRef, useEffect } from 'react'
export default function App() {
    const inputRef = createRef(1)
    console.log(inputRef)

    const useInputRef = useRef(2)
    console.log(useInputRef)

    useEffect(() => {
        console.log(inputRef)
        console.log(useInputRef)
    })
    return (
        <div>
            value: {inputRef.current}
            <input type="text" ref={inputRef} />
            <button onClick={e => {inputRef.current.focus();inputRef.current.value=4}}>获取焦点</button>
            <br/>
            value: {useInputRef.current}
            <input type="text" ref={useInputRef} />
            <button onClick={e => {useInputRef.current.focus();inputRef.current.value=4}}>获取焦点</button>
        </div>
    )
}

查看结果:
在这里插入图片描述
可以看到,我们给createRef(1),useRef(2),但为什么inputRef打印为null,而useInputRef打印为2?
这是因为createRef每次重新渲染的时候都会创建一个新的ref对象,它在class组件里面去用的时候,会有对应的生命周期对其进行渲染调用render方法,所以在函数式组件中它并没有实现像useRef的功能,每次重新渲染只会得到一个null值。

所以在使用中,尽量在class组件中使用createRef,在函数组件中使用useRef。useRef第一次渲染创建一个对象之后,再重新渲染的时候,如果发现这个对象已经创建过就不会再创建第二次,性能会好一些

总结

1.createRef每次重新渲染的时候都会创建一个新的ref对象
2.useRef第一次渲染创建一个对象之后,再重新渲染的时候,如果发现这个对象已经创建过就不会再创建第二次,性能会好一些
3.尽量在class组件中使用createRef,在hooks中使用useRef

相关文章
|
2月前
|
JavaScript 前端开发 开发者
React和Vue有什么区别?
React 和 Vue 都有各自的优势和特点,开发者可以根据项目的需求、团队的技术背景以及个人的喜好来选择使用。无论是 React 还是 Vue,它们都在不断发展和完善,为前端开发提供了强大的支持。
157 2
|
2月前
|
JavaScript 前端开发 算法
React 框架和 Vue 框架的区别是什么?
React框架和Vue框架都是目前非常流行的前端JavaScript框架,它们在很多方面存在区别
|
2月前
|
JavaScript 前端开发 算法
在性能上,React和Vue有什么区别
【10月更文挑战第23天】在性能上,React和Vue有什么区别
24 1
|
3月前
|
存储 缓存 JavaScript
深入理解 React-Hooks 之 useRef
【10月更文挑战第20天】总之,`useRef` 是 React-Hooks 中一个非常实用的工具,它为我们提供了一种灵活而强大的方式来处理组件中的各种数据和操作。通过深入理解和掌握 `useRef` 的原理和用法,我们能够更好地构建高效、稳定的 React 应用。
49 6
|
3月前
|
前端开发 JavaScript UED
react-router 里的 Link 标签和 a 标签有什么区别
`react-router` 中的 `Link` 标签与 HTML 中的 `a` 标签的主要区别在于:`Link` 是专门为 React 应用设计的,用于实现客户端路由导航,不会触发页面的重新加载,而 `a` 标签则会刷新整个页面。使用 `Link` 可以提升应用的性能和用户体验。
|
3月前
|
前端开发 开发者 UED
React 18 与之前版本的主要区别
【10月更文挑战第12天】 总的来说,React 18 的这些区别体现了 React 团队对于提升应用性能、用户体验和开发效率的持续努力。开发者需要适应这些变化,充分利用新特性来构建更出色的应用。同时,随着技术的不断发展,React 也将继续演进,为开发者带来更多的创新和便利。
|
2月前
|
开发框架 JavaScript 前端开发
React和Vue之间的区别是什么
【10月更文挑战第23天】React和Vue之间的区别是什么
18 0
|
2月前
|
JavaScript 前端开发 Android开发
React和Vue之间的区别是什么
【10月更文挑战第23天】React和Vue之间的区别是什么
37 0
|
3月前
|
存储 前端开发 JavaScript
React useState 和 useRef 的区别
本文介绍了 React 中 `useState` 和 `useRef` 这两个重要 Hook 的区别和使用场景。`useState` 用于管理状态并在状态变化时重新渲染组件,适用于表单输入、显示/隐藏组件、动态样式等场景。`useRef` 则用于在渲染之间保持可变值而不触发重新渲染,适用于访问 DOM 元素、存储定时器 ID 等场景。文章还提供了具体的代码示例,帮助读者更好地理解和应用这两个 Hook。
69 0
|
4月前
|
缓存 前端开发
React中函数式Hooks之memo、useCallback的使用以及useMemo、useCallback的区别
React中的`memo`是高阶组件,类似于类组件的`PureComponent`,用于避免不必要的渲染。`useCallback` Hook 用于缓存函数,避免在每次渲染时都创建新的函数实例。`memo`可以接收一个比较函数作为第二个参数,以确定是否需要重新渲染组件。`useMemo`用于缓存计算结果,避免重复计算。两者都可以用来优化性能,但适用场景不同:`memo`用于组件,`useMemo`和`useCallback`用于值和函数的缓存。
114 1