忙里偷閑,先記下來寫個大概,反正就是把代碼復制跑一遍就知道怎么用了

父級代碼:
import React, { useRef } from 'react';
import HelloWorld2 from '@/components/HelloWorld/HelloWorld2';
const Test2 =(props)=> {
const test1 = () => {
console.log("父組件准備調用子組件方法");
userQqq.current.getName();
};
const userQqq = useRef(); // 命名最好還是user開頭
return (
<div>
<button onClick={test1}>調用子組件方法getName</button>
<HelloWorld2 ref={userQqq}/>
</div>
)
}
export default Test2;
子級代碼:
import React, { forwardRef, useImperativeHandle } from 'react';
// 子組件不再使用react的React方式來創建,
// 直接通過函數的方式創建,函數子組件接收兩個參數,
// 第一個參數是父組件傳過來的其它參數,第二個參數是ref
const HelloWorld2 = (props, ref) => {
const getName = () => {
console.log("子組件方法");
};
// react規定必須使用useImperativeHandle方法,
// 來保存並拋出想要傳遞給父組件的方法或者數據,
// 第一個參數是ref,第二個參數是函數,返回想要拋出的對象集合
useImperativeHandle(ref, () => ({
getName,
}));
return (
<div>子組件</div>
);
};
//必須通過forwardRef方法拋出函數組件
export default forwardRef(HelloWorld2);
