需求:需要获取到函数自组件中form表单组装后的数据。
解决:如果只是函数子组件中form表单中的数据,这个比较简单,直接传onLoad函数,回传函数子组件的form,然后该调用的时候直接调用即可,但是如果是需要子组件form表单中的数据组装后拿回,那这个就会有点问题,当时的解决方式是通过把子组件改成class类的形式,给子组件加ref,然后通过ref调用子组件中组装数据返回数据的方法实现的,下面提供一种纯粹reactHook获取子组件组装数据的方法。
interface Prop{
onLoad:(form:any)=>void
}
const Acom:React.FC<Prop>=({onLoad})=>{
const TransData = {
validateFields: () =>
new Promise((resolve, reject) => {
setEditeIndex(index => {
if (index > -1) {
message.info('请先完成编辑!');
reject('请先完成编辑!');
} else {
setData(data => {
resolve(data );
return data ;
});
}
return index;
});
}),
};
useEffect(()=>{
//一家在就传传递这个给调用的组件
onLoad&&onLoad(TransData)
},[])
}
外面组件调用举例
const Bcom=()=>{
const [dataForm,setDataForm]=useState();
async function getData(){
let data=await dataForm.vaidataFileds()//通过这种方式获取函数子组件的值
}
return (
<Acom
onLoad={(form: any) =>setDataForm(form)}
></Acom>
)
}