我收到了两个不同的 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 1BEFOR SET DATA 1Data in return 2AFTER 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 1BEFOR SET DATA 1AFTER SET DATA 1Data in return 2当 async 函数被移除时,useEffect 首先完成,同时也打印旧的状态值,然后打印返回的 console.log。知道这里发生了什么以及为什么这是打印发生的顺序吗?
添加回答
举报
0/150
提交
取消