我收到了两个不同的 console.log 打印订单,这些订单基于我是否使用了承诺。
状态:
let [data,setData] = useState(1);
使用承诺时:
let asyncFunk = async () => {
return "Asd";
};
useEffect(() => {
asyncFunk().then((result) => {
console.log("BEFOR SET DATA " +data);
setData(prev => prev +1 );
console.log("AFTER SET DATA " +data);
});
},[]);
return (
<div>
{console.log("Data in return " + data)}
</div>
);
}
console.log 打印顺序是:
Data in return 1
BEFOR SET DATA 1
Data in return 2
AFTER SET DATA 1
因此,当 setData() 被命中时,组件将重新渲染,并且在 setData() 之后的 console.log 之前调用返回的 console.log。
当我删除异步功能时:
useEffect(() => {
console.log("BEFOR SET DATA " +data);
setData(prev => prev +1 );
console.log("AFTER SET DATA " +data);
},[]);
return (
<div>
{console.log("Data in return " + data)}
</div>
);
}
console.log 打印顺序是:
Data in return 1
BEFOR SET DATA 1
AFTER SET DATA 1
Data in return 2
当 async 函数被移除时,useEffect 首先完成,同时也打印旧的状态值,然后打印返回的 console.log。
知道这里发生了什么以及为什么这是打印发生的顺序吗?
慕斯709654
相关分类