reactjs React useEffect依赖关系数组及实现

yhived7q  于 2022-12-03  发布在  React
关注(0)|答案(1)|浏览(151)

我是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]);
sulc1iza

sulc1iza1#

您可以像下面这样使用单独的useEffect

// add params.id to dependency array
useEffect(() => {
  if (params.id) {
    async function fetchData() {
      await fetchFaqs();
    }
    fetchData();
  }
}, [params.id])

useEffect(() => {
  checkIfFormIsValid();
}, [answer, question, section, sort, checkIfFormIsValid])

相关问题