P粉0345716232023-08-15 15:59:32
在循環中的副作用:你在useEffect中使用setTimeout和setIndex的方式可能會導致意外的行為。 useEffect在每次渲染後執行,並且在setTimeout回調中直接使用index狀態可能會造成問題,因為閉包在建立回調時會捕獲狀態值。
存取陣列元素:你試圖使用索引來存取users陣列的元素,但由於useEffect和延遲的非同步性質,可能會超出陣列的範圍。
const [index, setIndex] = useState(0); useEffect(() => { console.log('RENDER'); console.log('副作用运行!'); if (index >= users.length) { return; } const timeoutId = setTimeout(() => { console.log('你好 ' + users[index]); setIndex(index + 1); }, 1000); return () => clearTimeout (timeoutId); }, [index]);