Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Komponen Memaparkan Dua Kali pada Setiap Kemas Kini Negeri dalam Mod Ketat?

Mengapa Komponen Memaparkan Dua Kali pada Setiap Kemas Kini Negeri dalam Mod Ketat?

Patricia Arquette
Patricia Arquetteasal
2024-10-24 04:04:31860semak imbas

Why Does a Component Render Twice on Every State Update in Strict Mode?

Memahami Kemas Kini Negeri dan Rendering Komponen

Walaupun tidak mendayakan mod ketat secara eksplisit, isu pemaparan komponen dua kali pada setiap kemas kini negeri berpunca daripada penggunaan Mod Ketat React.

Dalam React, komponen Apl dibalut dalam React.Mod Ketat:

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  rootElement
);

Menurut dokumentasi React:

Strict Mod tidak dapat mengesan kesan sampingan secara automatik untuk anda, tetapi ia boleh membantu anda mengesannya dengan menjadikannya lebih deterministik. Ini dilakukan dengan menggunakan dua kali fungsi berikut dengan sengaja:

  • Nyatakan fungsi pengemas kini (argumen pertama untuk setState)
  • Fungsi yang diluluskan kepada useState, useMemo, atau useReducer

Dalam contoh anda, fungsi chaneNumber yang diserahkan kepada pengendali onClick mencetuskan kemas kini keadaan menggunakan useState. Akibatnya, React sengaja menggunakan dua kali fungsi ini dalam mod pembangunan. Inilah yang menyebabkan komponen dipaparkan dua kali pada setiap kemas kini keadaan.

Tingkah laku ini bertujuan untuk membantu pembangun mengenal pasti kesan sampingan atau isu prestasi yang mungkin disebabkan oleh kemas kini negeri. Dengan menjalankan fungsi dua kali, React memastikan bahawa sebarang kesan sampingan 발생 dua kali, menjadikannya lebih mudah untuk nyahpepijat dan menangani sebarang masalah yang mungkin berlaku.

Atas ialah kandungan terperinci Mengapa Komponen Memaparkan Dua Kali pada Setiap Kemas Kini Negeri dalam Mod Ketat?. 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