Rumah > hujung hadapan web > tutorial js > Mengapa Cangkuk `setInterval` React Saya Gagal Mengemas kini Keadaan dengan Betul?

Mengapa Cangkuk `setInterval` React Saya Gagal Mengemas kini Keadaan dengan Betul?

Mary-Kate Olsen
Lepaskan: 2024-12-12 17:02:10
asal
398 orang telah melayarinya

Why Does My React `setInterval` Hook Fail to Update State Properly?

State Trap Within React's setInterval Hook

Apabila menggunakan React's useState hook dalam setInterval, adalah penting untuk mengetahui kemungkinan cabaran: kemas kini keadaan mungkin tidak mencerminkan seperti yang dijangkakan.

Dalam contoh kod yang disediakan, walaupun cuba menambah keadaan masa setiap saat, ia kekal tersekat pada 0. Ini kerana panggilan balik dalam setInterval terikat dengan nilai masa awal dan tidak mempunyai akses kepada kemas kini keadaan seterusnya.

Penyelesaian: Menggunakan Borang Panggilan Balik useState

Untuk menyelesaikan isu ini, gunakan borang panggil balik useState. Ini membolehkan panggilan balik mengakses nilai keadaan semasa sebelum mengemas kininya.

setTime(prevTime => prevTime + 1); // Updates based on current state
Salin selepas log masuk

Kemas Kini Pelaksanaan:

function Clock() {
  const [time, setTime] = React.useState(0);
  React.useEffect(() => {
    const timer = window.setInterval(() => {
      setTime(prevTime => prevTime + 1);
    }, 1000);
    return () => {
      window.clearInterval(timer);
    };
  }, []);

  return (
    <div>Seconds: {time}</div>
  );
}
Salin selepas log masuk

Bonus: Pendekatan Alternatif

Untuk maklumat lanjut tentang pengendalian setInterval dengan cangkuk, rujuk Dan Catatan blog Abramov, yang meneroka kaedah alternatif, seperti menggunakan rujukan atau cangkuk useReducer.

Atas ialah kandungan terperinci Mengapa Cangkuk `setInterval` React Saya Gagal Mengemas kini Keadaan dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan