React父组件获取子组件方法

在react的class组件中父组件调用子组件方法直接用ref就可以拿到子组件这个实例,但是在function中,api并没有这么明确,我们需要借助hooks去帮助我们拿到这个实例。
本篇介绍如何运用useRef 与 useImperativeHandel 方法结合

函数组件实现

子组件代码

import { Input } from 'antd';
import React, {  useImperativeHandle, useRef } from 'react';

export default function ChildInput ({onRef}: any)  {
  const inputRef = useRef(null);
  
  useImperativeHandle(onRef, () => inputRef.current);
  
  return (
      <div >
        <Input ref={inputRef}/>
      </div>
  )
}

父组件代码

import ChildInput from './ChildInput';
import { Button } from 'antd';
import React, { useRef } from 'react';

export default () => {
  const inputRef = useRef([]);
 
  const onFinish = () => {
    console.log('获取子组件值', inputRef.current.value);
  }

  return (
      <div>
        <Button disabled={disabled} type='primary' onClick={onFinish}>保存</Button>
        <ChildInput onRef={inputRef} />
      </div>
  );
};

组件中生成多个子组件,遍历多个ref

子组件如上父组件代码

import ChildInput from './ChildInput';
import { Button } from 'antd';
import React, { useRef } from 'react';
import { InputList } from '@/constants';
export default () => {
  const inputRef = useRef([]);
 	
  const onFinish = () => {
    console.log('获取全部子组件', inputRef.current);
  }

  return (
      <div>
        <Button disabled={disabled} type='primary' onClick={onFinish}>保存</Button>
        {
			InputList.map((item,index)=>{
				return (
					<ChildInput 
					   key={item.id} 
	                  //根据索引添加多个ref
	                  onRef={(f: any) => { inputRef.current[index] = f}}  
					/>
				)
			})
		}
      </div>
  );
};

posted on   ygunoil  阅读(449)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2021-10-12 browserslist 目标浏览器配置表
2021-10-12 升级npm
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示