react map绑定动态ref获取子组件的实例cuurent为空

51 篇文章 2 订阅
39 篇文章 0 订阅

父组件动态加载了多个子组件,想在父组件点击确定的时候同时获取全部子组件的值

1.父组件

import { useEffect, useRef, useState } from 'react';
import Son from './Son';

function Parent() {
	const formRef1 = useRef(); //绑定ref
	const formRef2 = useRef(); //绑定ref
	const arrData = [{ //遍历对象,包含子组件的ref
	    ref: formRef1, //注意,不同的组件需要绑定不同的ref实例
	    data:[]
	  },{
	    ref: formRef2,
	    data:[]
	}]
	
	const [arr, setArr] = useState(arrData);
	
	const getSonData = ()=>{ //获取子组件的值
		console.log(arr[0].ref?.current?.getData())}
	}
	
	 return (
    	<>
		<Button type='primary' onClick={()=>{getSonData()}>获取ref数据</Button>
     	 {arr.map((item, index) => {
        	return <Son ref={item.ref} name={index} key={index} data={item.data}></Son>
        	})
         }
       </>
  );
}
export default Parent;

2.子组件

需要引入forwardRef,useImperativeHandle,并且注意传入refprops同级;

当该参数forwardRef设置时,包裹组件(wrapper component )的ref属性将会实际返回被包裹组件(wrapped component)实例。

import { useEffect, useState,forwardRef,useImperativeHandle } from 'react';

const Son = forwardRef((({data,name},ref) => {
	useImperativeHandle(ref, () => {return { getData};});
	const getData = ()=>{ //要暴露给ref的事件
      return {data:`子组件${name}的值`,}
    }
	 return (
    	<>
		<div>{data}</data>
 		</>
   );
})
export default Son;

3.效果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值