我尝试从Unsplash API
获取图像,然后尝试在以下代码中使用useState
更新图像数据。
const [images, setImages] = useState([]);
useEffect(() => {
Axios.get(
"https://api.unsplash.com/photos/?client_id=l2U-D_PXXujBJoRiCCMCL2ifi_5ZJcK4AC0WH-A2lKk"
)
.then((res) => {
//res.data is printing correct/expected value
console.log(res.data);
setImages(res.data);
console.log("lul");
//but images array is still empty
console.log("images: ", [images]); // []
})
.catch((err) => console.error(err));
}, []);
如果我把images数组放在dependency数组中,那么我就可以更新image数组,但是这样抓取就无限地发生了。
为什么会发生这种情况?
2条答案
按热度按时间2w3rbyxf1#
你做错的是在React重新渲染之前尝试
console.log
。通过相关的setState
更新state
并不是即时的,正如文档所说:set
函数只更新下一次渲染的状态变量。如果在调用set函数之后读取状态变量,则仍将获得调用之前屏幕上的旧值。记录状态变化的一种方法是在定义
console.log()
之后添加它:0md85ypi2#
setState
是异步调用的(尽管它不返回promise,所以你不能await
它)。保持你的
useEffect
现在的样子,为了在images
改变时打印新的值,你可以使用另一个useEffect
: