次のコードでわからない部分があります。 await
でtimeout
の処理を待っているのにもかかわらず、
なぜか、ログの結果が1, 3, 2, 4
になります。また、この記述だとup関数内でsetCount
関数が2回呼び出しています。
また、通常の関数の中でsetCount
を2回呼び出した場合レンダリングの回数が初期レンダリングと合わせて2回でした。このコードだとレンダリングが合計3回発生します。
解説の程をよろしくお
js
1const timeout = async (ms: number) => 2 new Promise<void>((resolve) => { 3 setTimeout(() => resolve(), ms); 4 }); 5 6const TestPage = () => { 7 const [count, setCount] = useState(0); 8 9 useEffect(() => { 10 const up = async () => { 11 setCount(1); 12 console.log("3"); 13 await timeout(3000); 14 console.log("4"); 15 setCount(2); 16 return; 17 }; 18 console.log("1"); 19 20 up(); 21 console.log("2"); 22 }, []); 23 24 return <div>{count}</div>; 25};
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。