setInterval Penyampaian semula tanpa had bagi komponen tindak balas-lengkap. Mengapa ini berlaku dan bagaimana untuk membetulkannya?
P粉978742405
P粉978742405 2024-04-03 15:39:05
0
1
506

Ini kod tindak balas saya. Ia menjadikan komponen itu dipaparkan semula tanpa had:

const [seconds, setSeconds] = useState(60)
useEffect(() => {
    const interval = setInterval(() => {
        setSeconds(seconds => seconds - 1);
    }, 1000);
    return () => clearInterval(interval);
}, []);

console.log("object");

P粉978742405
P粉978742405

membalas semua(1)
P粉476046165

Ini berlaku kerana anda hanya mengosongkan selang apabila komponen memunggah, yang hanya berlaku apabila pengguna menavigasi keluar dari halaman.

Mungkin ini yang anda perlukan? Apabila selang mencapai 0, saya mengosongkannya. Tetapi untuk ini saya perlu menggunakan rujukan, saya tidak boleh menggunakan keadaan dari setInterval kerana ia hanya mempunyai nilai awal:

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 ; }

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan