Rumah > hujung hadapan web > tutorial js > Mengapakah Menggunakan `setInterval` dengan Cangkuk Keadaan Bertindak Menyebabkan Gelagat Tidak Dijangka?

Mengapakah Menggunakan `setInterval` dengan Cangkuk Keadaan Bertindak Menyebabkan Gelagat Tidak Dijangka?

Barbara Streisand
Lepaskan: 2024-12-08 13:43:12
asal
877 orang telah melayarinya

Why Does Using `setInterval` with React State Hooks Cause Unexpected Behavior?

Menggunakan React State Hooks dengan setInterval: Memahami Isu Kemas Kini Negeri

Dalam React, menggunakan cangkuk keadaan dalam setInterval boleh menyebabkan masalah dengan kemas kini negeri. Ini timbul apabila fungsi panggil balik dihantar ke setInterval mengekalkan akses kepada nilai keadaan awal, menghalang kemas kini berikutnya daripada ditunjukkan.

Masalahnya

Pertimbangkan komponen Jam berikut:

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

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

Isunya terletak pada fungsi panggil balik setTime. Ia merujuk pembolehubah masa pada masa pemaparan pertama, bukan nilai dikemas kini daripada pemaparan berikutnya. Akibatnya, kemas kini keadaan adalah terhad kepada nilai awal.

Penyelesaian

Untuk membetulkan isu ini, gunakan borang panggil balik cangkuk keadaan, yang menyediakan akses kepada nilai keadaan semasa:

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

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

Kini, fungsi panggil balik dengan betul menggunakan nilai keadaan terkini, memastikan masa dikemas kini sebagai dijangka.

Pendekatan Alternatif

Dan Abramov meneroka cara lain untuk mengendalikan setInterval dengan cangkuk dalam catatan blognya, menawarkan pendekatan alternatif yang mungkin sesuai dengan senario tertentu.

Atas ialah kandungan terperinci Mengapakah Menggunakan `setInterval` dengan Cangkuk Keadaan Bertindak Menyebabkan Gelagat Tidak Dijangka?. 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