我正在尝试将头缠在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]);
我的想法是对的,我需要以这种方式而不是以这种方式进行?
答案 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时,它只会运行一次