我的代码中有一个搜索按钮,它将gatewayId作为用户的输入。当用户单击搜索按钮时调用Displaydata函数。然后,它通过setToggle状态使另一个div的可见性为真,并调用loadDetails函数。它通过axios使setdetails等于获取的详细信息。
const displaydata = (e) => {
setToggle(true);
loadDetails();
console.log(details);
};
const loadDetails = async()=>{
await axios.get(`http://localhost:8282/changeShipmentDetails/${gatewayId}`)
.then((response)=>{
setToggle(true);
setdetails(response.data);
})
.catch(error=>{
setToggle(false);
setMsg(error.response.data);
});
};
但是在第一次点击的时候,它提供了null,然后在第二次点击的时候,它在控制台中产生了结果。如何修复它?
2条答案
按热度按时间dwthyt8l1#
React对状态更新进行批处理,当您执行setState时,它不会反映在控制台日志的下一行代码中。它已经对状态更新进行了批处理,在第一次单击时,它获取的是当前的状态still,该状态为null。
你可以做一些沿着的事情
这应该会显示您所期望的内容,还需要删除displaydata函数中的setToggle,因为它是在loadDetails函数中调用的
t30tvxxf2#
这是因为你没有等到结果被读取,而且,当你在displayData函数中使用console.log()时,它总是显示初始数据,而不是更新的数据,要使用console.log记录更新的数据,你需要在外部记录它: