useImperativeHandle
useImperativeHandle(ref, createHandle, [deps])
第一个参数为父组件传递的 ref
第二个参数是一个函数,返回的一个对象会自动绑定到ref上。 即子组件可以将自己内部的方法或者值通过useImperativeHandle添加到父组件中useRef定义的对象中。
第三个参数是函数依赖的值(可选)。若 createHandle 函数中使用到了子组件内部定义的变量,则还需要将该变量作为依赖变量成为useImperativeHandle第3个参数
需 useRef 和 forwardRef 共同使用
useImperativeHandle(
ref,
() => ({
comFormRef: () => {
return comFormRef;
},
fileList: () => {
return fileList;
}
}),
[comFormRef, JSON.stringify(fileList)]
);
//子组件暴露数组时候需要转换字符串,其他不用
注意:暴露出去的变量一定要定义在他之前,否则暴露不出去
const [changeReason, setChangeReason] = useState();
useImperativeHandle(
ref,
() => ({
changeReason
}),
[changeReason]
);