import React, { useState, useRef, forwardRef, useImperativeHandle } from 'react'; import {Button} from 'antd'; const Child: React.FC<any> = forwardRef((props, ref) => { const [childText, setChildText] = useState<number>(1); const childAbc = () => { console.log('childAbc'); }; // 把實例傳給ref,然后父組件可以通過ref獲取子組件的變量和方法。 useImperativeHandle(ref, () => ({ childAbc, childText, setChildText, })); return ( <div className="intelligenceSearch"> 子組件 childIndex -變化了 {childText} </div> ); }); const Father: React.FC<any> = (props) => { // 獲取子組件的實例和方法 let childRef = useRef<any>(null); return ( <div className="intelligenceSearch"> 父組件 <Button onClick={()=>{ let {childText, setChildText}: {childText: number; setChildText: Function} = childRef.current; setChildText(childText+1) }}>改變childText的值</Button> <Button onClick={() => { const {childAbc} = childRef.current; childAbc && childAbc(); }}>執行子組件childAbc方法</Button> ---------- <Child ref={childRef} /> </div> ); }; export default Father;