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;