反应 useEffect 与依赖数组仍然循环

react useEffect with Dependency Array still looping

我正在努力思考 useEffect 钩子。据我所知,如果挂钩中包含依赖项数组,则只有在该特定状态发生变化时才会产生 运行 效果,但我无法让它工作。每次我添加依赖数组时,它都会无限循环。


    useEffect(() => {

      axiosWithAuth()
        .get(`/api/parent/children/${id}`)
        .then(response => {
          // console.log('API response: ', response);
          // console.log('childs data: ',response.data);
          setData(response.data)
          // console.log('new data: ', data);
        });
      .catch(err => console.log(err));
    }, [data]);

如果我从依赖数组中提取数据,它工作正常,没有循环。前提是,如果用户单击 child 的名称,它会显示该 child 的数据(这是我正在处理的 chore-tracker)所以我会假设(我可能是错的)...

我想我可能已经自己回答了这个问题,但我想得到一些确认:

我需要为 child 设置一个状态片段,如果那个状态发生变化,那么效果 运行s.. 所以.. 像这样..


    const {data, setData} = useState([]);
    const {child, setChild} = useState('');

      useEffect(() => {

        axiosWithAuth()
          .get(`/api/parent/children/${id}`)
          .then(response => {
            // console.log('child list response: ', response);
            // console.log('childs data length',response.data.length);
            // console.log('childs data',response.data);
            setData(response.data)

            // console.log('new data: ', data);
          });
          .catch(err => console.log(err));
      }, [child]);

我的想法是否正确,我需要那样做而不是我原来的方式?

是的,你做得很好。 但是对于这类问题更好的答案是:

useEffect(() => {
        axiosWithAuth()
          .get(`/api/parent/children/${id}`)
          .then(response => {
            // console.log('child list response: ', response);
            // console.log('childs data length',response.data.length);
            // console.log('childs data',response.data);
            setData(response.data)

            // console.log('new data: ', data);
          });
          .catch(err => console.log(err));
} , []})

当您将一个空数组传递给 useEffect 时,它只运行一次