为什么我的响应使用正确的数据执行了不止一次,而不是只使用 useEffect() 执行了一次?
Why's my response being executed more than once with the correct data instead of just only once with useEffect()?
我知道有一个空的依赖项 []
只执行一次 useEffect()
但是当它确实只执行一次并且有一个空的依赖项 []
- 它在控制台中记录一个空数组。
当它不为空时,它只是不断地记录,看不到尽头(使用正确的数据)。我不确定为什么它不能用我需要使用的数据正确记录一次。
我做错了什么?
代码如下:
const [uploadsData, setUploadsData] = useState([]);
const getUploads = async () => {
const headers = {
"Accept": 'application/json',
"Authorization": `Bearer ${authToken}`
}
await axios.get('http://localhost:8000/api/get-uploads', {headers})
.then(resp => {
console.log(resp);
setUploadsData([resp.data]);
}).catch(error => {
console.log(error);
});
};
useEffect(() => {
getUploads();
// logs empty array in the console if dependency array is empty
// logs correct data when dependency array isn't empty - i.e. [uploadsData]
console.log(uploadsData);
}, []);
第一次打印空数组,因为在 React 中更新状态是异步的。
假设您将 uploadsData 添加到依赖项数组。
当您的效果运行时,它会更新 uploadsData
THEN 效果会再次触发。
这将永远持续下去!
那是因为您在 useEffect
挂钩的回调中引用了 uploadsData
并且为了获得正确的控制台日志,您应该 运行 该代码在一个单独的 useEffect
勾.
useEffect(() => {
getUploads();
}, []);
useEffect(() => {
// logs empty array in the console if dependency array is empty
// logs correct data when dependency array isn't empty - i.e. [uploadsData]
console.log(uploadsData);
}, [uploadsData]);
这样,getUploads
函数只被调用一次,并向浏览器控制台输出正确的 uploadData
。
我知道有一个空的依赖项 []
只执行一次 useEffect()
但是当它确实只执行一次并且有一个空的依赖项 []
- 它在控制台中记录一个空数组。
当它不为空时,它只是不断地记录,看不到尽头(使用正确的数据)。我不确定为什么它不能用我需要使用的数据正确记录一次。
我做错了什么?
代码如下:
const [uploadsData, setUploadsData] = useState([]);
const getUploads = async () => {
const headers = {
"Accept": 'application/json',
"Authorization": `Bearer ${authToken}`
}
await axios.get('http://localhost:8000/api/get-uploads', {headers})
.then(resp => {
console.log(resp);
setUploadsData([resp.data]);
}).catch(error => {
console.log(error);
});
};
useEffect(() => {
getUploads();
// logs empty array in the console if dependency array is empty
// logs correct data when dependency array isn't empty - i.e. [uploadsData]
console.log(uploadsData);
}, []);
第一次打印空数组,因为在 React 中更新状态是异步的。
假设您将 uploadsData 添加到依赖项数组。 当您的效果运行时,它会更新 uploadsData THEN 效果会再次触发。
这将永远持续下去!
那是因为您在 useEffect
挂钩的回调中引用了 uploadsData
并且为了获得正确的控制台日志,您应该 运行 该代码在一个单独的 useEffect
勾.
useEffect(() => {
getUploads();
}, []);
useEffect(() => {
// logs empty array in the console if dependency array is empty
// logs correct data when dependency array isn't empty - i.e. [uploadsData]
console.log(uploadsData);
}, [uploadsData]);
这样,getUploads
函数只被调用一次,并向浏览器控制台输出正确的 uploadData
。