Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mengelakkan React useEffect Hook daripada Berjalan pada Initial Render?

Bagaimana untuk Mengelakkan React useEffect Hook daripada Berjalan pada Initial Render?

DDD
DDDasal
2024-11-24 15:18:11556semak imbas

How to Prevent the React useEffect Hook from Running on Initial Render?

Menghalang React useEffect Hook daripada Berjalan pada Initial Render

useEffect hook ialah alat berharga untuk menguruskan kesan sampingan dalam komponen React. Walau bagaimanapun, secara lalai, ia berjalan selepas setiap pemaparan, termasuk yang awal. Ini boleh membawa kepada tingkah laku yang tidak diingini, seperti yang digambarkan oleh kod contoh. Untuk mengatasinya, terdapat dua strategi yang berkesan.

1. Menggunakan Cangkuk useRef untuk Menjejaki Render Awal

Cangkuk useRef membolehkan kami menyimpan nilai boleh ubah yang berterusan sepanjang pemaparan semula. Dengan memanfaatkan ini, kita boleh menjejaki sama ada ini kali pertama fungsi useEffect dilaksanakan.

Contoh:

const { useState, useRef, useEffect } = React;

function ComponentDidUpdateFunction() {
  const [count, setCount] = useState(0);

  const firstUpdate = useRef(true);
  useEffect(() => {
    // Skip the initial render
    if (firstUpdate.current) {
      firstUpdate.current = false;
      return;
    }

    console.log("useEffect ran");
  });

  return (
    <div>
      <p>useEffect ran: {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click Me</button>
    </div>
  );
}

ReactDOM.render(<ComponentDidUpdateFunction />, document.getElementById("app"));

2. Menggunakan useLayoutEffect Hook

useLayoutEffect Hook diperkenalkan untuk mensimulasikan gelagat componentDidUpdate dari segi fasa pelaksanaan. Ia dijalankan sebelum penyemak imbas melukis, menghalang sebarang gangguan visual.

Contoh:

const { useState, useLayoutEffect } = React;

function ComponentDidUpdateFunction() {
  const [count, setCount] = useState(0);

  useLayoutEffect(() => {
    console.log("useLayoutEffect ran");
  });

  return (
    <div>
      <p>useLayoutEffect ran: {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click Me</button>
    </div>
  );
}

ReactDOM.render(<ComponentDidUpdateFunction />, document.getElementById("app"));

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan React useEffect Hook daripada Berjalan pada Initial Render?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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