84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
這是我的反應程式碼。它使元件無限重新渲染:
const [seconds, setSeconds] = useState(60) useEffect(() => { const interval = setInterval(() => { setSeconds(seconds => seconds - 1); }, 1000); return () => clearInterval(interval); }, []); console.log("object");
發生這種情況是因為您僅在元件卸載時清除間隔,這僅在使用者離開頁面時才會發生。
也許這就是您所需要的?當間隔達到 0 時,我將清除它。但為此我必須使用引用,我不能使用 setInterval 中的狀態,因為它只有初始值:
export default function App() { const [seconds, setSeconds] = useState(5); const secondsRef = useRef(seconds); useEffect(() => { const interval = setInterval(() => { if (secondsRef.current seconds - 1); }, 1000); return () => clearInterval(interval); }, []); console.log("running", new Date()); return {seconds ; }
{seconds ; }
發生這種情況是因為您僅在元件卸載時清除間隔,這僅在使用者離開頁面時才會發生。
也許這就是您所需要的?當間隔達到 0 時,我將清除它。但為此我必須使用引用,我不能使用 setInterval 中的狀態,因為它只有初始值: