react如何利用useRef、forwardRef、useImperativeHandle获取并处理dom

 更新时间:2023年10月18日 15:15:22   作者:田本初  
这篇文章主要介绍了react如何利用useRef、forwardRef、useImperativeHandle获取并处理dom,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

React如何给组件设置ref属性,如果直接绑给组件,代码如下:

import { useRef } from "react"
function MyInput() {
	return (
		<input type="text"/>
	)
}
function App() {
  const myRef = useRef(null)
  const handleClick = () => {
    ref.current.style.background = "red"
    ref.current.focus()
  }
  return (
  	<div>
    	<button onClick={handleClick}>点击</button>
      <MyInput ref={myRef}></MyInput>
    </div>
  )
}

此时点击按钮,发现无法正确拿到MyInput组件中的input元素,并且控制台报错。因为MyInput函数作用域中并没有绑定ref。

根据提示,需要使用forwardRef(),写法如下:

import { useRef,forwardRef } from "react"
const MyInput = forwardRef(function MyInput(props,ref) {
	return (
		<input type="text" ref={ref}/>
	)
})
function App() {
  const myRef = useRef(null)
  const handleClick = () => {
    ref.current.style.background = "red"
    ref.current.focus()
  }
  return (
  	<div>
    	<button onClick={handleClick}>点击</button>
      <MyInput ref={myRef}></MyInput>
    </div>
  )
}

但上述写法会将MyInput组件中的input全部暴露出来,导致在其他组件中,可以对该元素进行任意操作,如果仅想对外提供某些功能,需要修改为如下写法:

import { useRef,forwardRef,useImperativeHandle } from "react"
const MyInput = forwardRef(function MyInput(props,ref) {
  // 添加如下
  const inputRef = useRef(null)
  useImperativeHandle(ref,()=>{
  	return {
      // 自定义方法
      focus(){
				inputRef.current.focus()
      }
   	}
  })
	return (
		// <input type="text" ref={ref}/>
    <input type="text" ref={inputRef}/>
	)
})
function App() {
  const myRef = useRef(null)
  const handleClick = () => {
    ref.current.style.background = "red"
    ref.current.focus()
  }
  return (
  	<div>
    	<button onClick={handleClick}>点击</button>
      <MyInput ref={myRef}></MyInput>
    </div>
  )
}

再次点击,可以发现只有focus会触发,背景色不会修改且控制台会有提示。

到此这篇关于react中利用useRef、forwardRef、useImperativeHandle获取并处理dom的文章就介绍到这了,更多相关react useRef、forwardRef、useImperativeHandle获取dom内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React中的生命周期和子组件

    React中的生命周期和子组件

    这篇文章主要介绍了React中的生命周期和子组件,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-08-08
  • react-three/postprocessing库的参数中文含义使用解析

    react-three/postprocessing库的参数中文含义使用解析

    这篇文章主要介绍了react-three/postprocessing库的参数中文含义使用总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • React+Webpack快速上手指南(小结)

    React+Webpack快速上手指南(小结)

    这篇文章主要介绍了React+Webpack快速上手指南(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • hooks写React组件的5个注意细节详解

    hooks写React组件的5个注意细节详解

    这篇文章主要为大家介绍了hooks写React组件的5个需要注意的细节详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • React useEffect不支持async function示例分析

    React useEffect不支持async function示例分析

    这篇文章主要为大家介绍了React useEffect不支持async function示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 解决React报错Expected `onClick` listener to be a function

    解决React报错Expected `onClick` listener to be a function

    这篇文章主要为大家介绍了React报错Expected `onClick` listener to be a function解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 一文带你搞懂useCallback的使用方法

    一文带你搞懂useCallback的使用方法

    useCallback是用来帮忙缓存函数的,当依赖项没有发生变化时,返回缓存的指针,而props涉及到复杂对象类型都是通过指针来传递到,下面这篇文章主要给大家介绍了关于useCallback使用的相关资料,需要的朋友可以参考下
    2023-02-02
  • react 应用多入口配置及实践总结

    react 应用多入口配置及实践总结

    这篇文章主要介绍了react 应用多入口配置及实践总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 使用react-dnd编写一个可拖拽排列的list

    使用react-dnd编写一个可拖拽排列的list

    这篇文章主要为大家详细介绍了如何使用react-dnd编写一个可拖拽排列的list,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 一篇文章带你理解React Props的 原理

    一篇文章带你理解React Props的 原理

    这篇文章主要为大家介绍了ReactProps的原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01

最新评论