需求:需要獲取到函數自組件中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>
)
}