在与依赖数组仍然循环的情况下对useEffect做出反应

时间:2020-02-09 06:45:56

标签: javascript reactjs use-effect

我正在尝试将头缠在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]);

如果我从依赖项数组中拉出数据,它可以正常工作,没有循环。前提是,如果用户单击孩子的名字,则会调出该孩子的数据(这是我正在研究的琐事跟踪器),所以我会(可能是错误的)建议...

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

我需要为孩子设置一个状态片,如果状态发生变化,效果就会运行..所以..类似这样的东西..


    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]);

我的想法是对的,我需要以这种方式而不是以这种方式进行?

1 个答案:

答案 0 :(得分:1)

是的,你还好。 但是对于此类问题,更好的答案是:

public static <T> T[] toArray(List<T> list)
{
    T[] li = (T[]) Array.newInstance(T.class, list.size());
    int index = 0;
    for(T obj : list)
    {
        li[index++] = obj;
    }
    return li;
}

当您传递一个空数组以使用useEffect时,它只会运行一次