您现在的位置是:网站首页> 编程资料编程资料
react使用useImperativeHandle示例详解_React_
2023-05-24
443人已围观
简介 react使用useImperativeHandle示例详解_React_
1.前言
相比大家看到useImperativeHandle会感到十分陌生,但部分开源代码经常会出现它的身影,网上查阅的资料也是含糊不清。经过一翻资料查询,终于摸清了一点,现在分享给各位爷。
2.useImperativeHandle初探
React官网的定义
useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值。
个人理解
官网的话用大白话解析:useImperativeHandle的作用是将子组件的指定元素暴漏给父组件使用。也就是父组件可以访问到子组件内部的特定元素。
3.获取元素的几种方式
下面我将逐步介绍获取元素的方式,进而引出今天的主角useImperativeHandle。
3.1 useRef:获取组件内部元素
import {useRef} from "react" export default function() { //1. const ele = useRef() //3.获取元素 const getElememntP = () => { console.log(ele.current) } return //2. } 点击按钮,我们可以获取到p元素。上面是useRef获取元素的方法,先简单小结下步骤
- 引入useRef,定义变量
- 在需要获取的dom元素上使用ref进行变量绑定
- 使用变量.current获取对应元素
3.2 forwardRef:父组件获取子组件内部的一个元素
上面的useRef在函数组件可以获取自身组件内部的元素,但是如果我们需要在父组件获取或者操作儿子组件的一个元素,此时forwardRef就随之出现了。
father.js
import {useRef} from "react" import Son from "./son" export default function(){ const eleP = useRef() const getElement = () => { console.log(eleP.current) } return } son.js
import {forwardRef} from "react" export default forwardRef(function(props,ref){ return }) 父元素点击按钮后,可以获取到儿子组件的p元素。
forwardRef在父组件获取儿子组件内部一个元素时,操作如下。
- 父组件按照useRef的规则绑定到儿子组件上
- 儿子组件使用forwardRef包裹,并在函数组件传递的参数接收,第一个参数porps接收父组件传递的数据,第二个ref接收的就是dom引用
- 在需要获取儿子组件的元素上直接绑定ref的值
3.3 useImperativeHandle:父组件可以获取/操作儿子组件多个元素
经过上面层层递进,终于来到我们今天的主角了,请大声告诉我她的名字:是usexxxHandle。它可以在父组件内部直接获取儿子组件任意的dom元素对象。
father.js
import {useRef} from "react" import Son from "./son" export default function(){ const eleP = useRef() const getElement = () => { console.log(eleP.current.ele1.current) console.log(eleP.current.ele2.current) } return } son.js
import {useRef,forwardRef,useImperativeHandle} from "react" export default forwardRef(function(props,ref){ const ele1 = useRef() const ele2 = useRef() useImperativeHandle(ref,()=>{ return {ele1,ele2} },[]) return }) 结果
父组件点击按钮后,可以一次性获取到多个标签元素,通过useImperativeHandle函数内部返回的对象可以获取对应的标签。具体使用直接看例子就行,我列举下useImperativeHandle的参数要求吧
useImperativeHandle(ref,()=>{ return {dom1,dom2} },[]) 第一个参数是组件的第二个参数ref 第二个参数是一个回调函数,内部返回的对象就是抛给父组件的元素对象 第三个参数是一个依赖数组,类似useEffect的依赖数组,如果依赖数组内部传递的数据发生改变,就会重新触发回调函数。
以上就是react使用useImperativeHandle示例详解的详细内容,更多关于react使用useImperativeHandle的资料请关注其它相关文章!
相关内容
- vue-router路由跳转问题 replace_vue.js_
- vue实现导出word文档功能实例(含多张图片)_vue.js_
- 在vue中如何引入外部less文件_vue.js_
- vue-router如何实时动态替换路由参数(地址栏参数)_vue.js_
- element-ui中el-input只输入数字(包括整数和小数)_vue.js_
- Vue Router修改query参数url参数没有变化问题及解决_vue.js_
- vue中如何防止用户频繁点击按钮详解_vue.js_
- vue中的路由传值与重调本路由改变参数_vue.js_
- 前端算法题解leetcode36-有效的数独示例_JavaScript_
- 关于TypeScript的踩坑记录_vue.js_
