Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menghalang useEffect Hook daripada Berjalan pada Render Awal dalam React?

Bagaimana untuk Menghalang useEffect Hook daripada Berjalan pada Render Awal dalam React?

Barbara Streisand
Barbara Streisandasal
2024-11-21 05:37:13590semak imbas

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

Membuat React's useEffect Hook Elakkan Pelaksanaan Awal Render

Kaedah kitaran hayat componentDidUpdate() dalam komponen React berasaskan kelas digunakan selepas setiap pemaparan, kecuali yang awal. Untuk mencontohi tingkah laku ini dengan cangkuk useEffect, nampaknya cangkuk itu berjalan pada setiap pemaparan, termasuk kali pertama.

Penyelesaian

Untuk mengelakkan useEffect daripada berjalan pada pemaparan awal, menggunakan cangkuk useRef boleh membantu menjejaki sama ada ia adalah seruan awal kesan.

Selain itu, untuk meniru gelagat componentDidUpdate, yang berjalan dalam fasa "kesan reka letak", pertimbangkan untuk menggunakan useLayoutEffect dan bukannya useEffect.

Contoh

const { useState, useRef, useLayoutEffect } = React;

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

  const firstUpdate = useRef(true);
  useLayoutEffect(() => {
    if (firstUpdate.current) {
      firstUpdate.current = false;
      return;
    }

    console.log("componentDidUpdateFunction");
  });

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

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

Pendekatan ini menggunakan cangkuk useRef untuk menjejak kemas kini pertama dan memastikan bahawa kesan hanya dilaksanakan semasa kemas kini berikutnya, mencerminkan tingkah laku componentDidUpdate dalam komponen berasaskan kelas.

Atas ialah kandungan terperinci Bagaimana untuk Menghalang useEffect Hook daripada Berjalan pada Render Awal dalam React?. 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