我是reaction钩子的新手,遇到过一个我解决过的问题,但不确定这是否是useEffect的正确实现。我有一个带有一些字段的表单(答案、问题等)进行一些验证,但没有实现下面的useEffect,我的验证由于设置状态的异步特性而落后了一步。在将useEffect和状态项添加到useEffect依赖项数组中之后,因此fetchData在每次状态改变时运行。每次fetchData完成时,它会清除窗体中正在更改的任何项的已更改状态。
我的解决方案是一个“mounted”状态变量,一旦提取发生,它就被设置为true。如果mounted为true,我就不再提取。这个解决方案似乎解决了重新提取的问题,以及状态落后一步。这是一个正确的模式使用,还是有更好/更首选的方法?
const [mounted, setMounted] = useState(false)
useEffect(() => {// reactive state
// if params.id that means we need to edit an existing faq
if(params.id && !mounted){
async function fetchData() {
await fetchFaqs();
setMounted(true);
}
fetchData();
}
checkIfFormIsValid();
}, [answer, question, section, sort, checkIfFormIsValid]);
1条答案
按热度按时间sulc1iza1#
您可以像下面这样使用单独的
useEffect
: