gpt4 book ai didi

reactjs - 如何在 useEffect 中使用新鲜状态,但仅在卸载时执行清理

转载 作者:行者123 更新时间:2023-12-04 15:07:29 25 4
gpt4 key购买 nike

AFAIK,在 React Function 组件中,必须使用 useEffectcomponentWillUnmount功能如下:

useEffect(()=>{
return console.log("component unmounting");
},[])
我正在制作一个表单页面,并希望在用户退出页面时提交进度。
所以我正在考虑在清理中提交。
但如果我不放 formData状态进入依赖数组,状态将在清理过程中过时。
如果我确实放了 formData进入依赖数组,每次在 formData 中发生变化时都会运行清理。 .
如何保持状态新鲜,但仅在“真正卸载”中运行清理?
const [formData, setFormData] = useState({
input1: 'input1 default',
input2: 'input2 default',
}); // track the form data


useEffect(()=>{
return () => {
axios.post(myFormSubmitURL, formData);
}
}, []); // this will submit the stale data

useEffect(()=>{
return () => {
axios.post(myFormSubmitURL, formData);
}
}, [formData]); // this will submit the data every time it changes

最佳答案

您可以使用 react ref 和附加效果来存储表单状态的缓存,以便在组件卸载时使用。

const formDataRef = useRef();
const [formData, setFormData] = useState({
input1: 'input1 default',
input2: 'input2 default',
}); // track the form data


useEffect(()=>{
return () => {
axios.post(myFormSubmitURL, formDataRef.current); // <-- access current value
}
}, []);

useEffect(()=>{
formDataRef.current = { ...formData }; // <-- cache form updated data
}, [formData]);

关于reactjs - 如何在 useEffect 中使用新鲜状态,但仅在卸载时执行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65840197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com