0Pricing
React Academy · Pelajaran

Kapan useLayoutEffect Berjalan dibandingkan useEffect

Pelajari bahwa useLayoutEffect berjalan secara sinkron setelah mutasi DOM, tetapi sebelum browser melakukan pengecatan.

Kapan useLayoutEffect Berjalan dibandingkan useEffect adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Waktu useLayoutEffect

useLayoutEffect dijalankan secara sinkron segera setelah React menerapkan mutasi DOM, tetapi sebelum peramban sempat menampilkan perubahan tersebut. Dari sudut pandang peramban, efek tata letak dan mutasi DOM merupakan bagian dari blok kerja sinkron yang sama dan tidak terputus.

Waktu useEffect

useEffect dijalankan secara asinkron setelah peramban selesai menampilkan perubahan. Pengguna melihat antarmuka yang diperbarui terlebih dahulu, lalu efek dijalankan. Hal ini membuat useEffect lebih sedikit mengganggu kinerja perenderan, tetapi berarti setiap perubahan yang terlihat dan disebabkan oleh efek akan menghasilkan siklus penggambaran kedua.

Eksperimen Stempel Waktu

Anda dapat memverifikasi perbedaan waktu tersebut dengan mencatat stempel waktu dalam kedua efek: tambahkan console.log('layout', Date.now()) di dalam useLayoutEffect dan console.log('passive', Date.now()) di dalam useEffect. Di konsol, stempel waktu efek tata letak akan selalu lebih awal daripada stempel waktu efek pasif, sehingga mengonfirmasi urutan eksekusinya.

Konsekuensi yang Terlihat bagi Pengguna

Jika useEffect memperbarui status yang memengaruhi keluaran visual, pengguna melihat dua perenderan: perenderan awal dengan status usang, lalu perenderan yang telah diperbaiki setelah efek dijalankan. Hal ini tampak sebagai kedipan atau perubahan tata letak yang terlihat. useLayoutEffect mencegahnya karena pembaruan statusnya diterapkan sebelum peramban menampilkan apa pun.

Pembaruan Status useLayoutEffect Menyebabkan Perenderan Ulang Sinkron

Jika Anda memanggil setState di dalam useLayoutEffect, React segera menjalankan siklus perenderan dan penerapan lainnya sebelum menampilkan apa pun. Peramban hanya menampilkan hasil akhir—pengguna tidak pernah melihat status perantara. Inilah kasus penggunaan utama useLayoutEffect: mengukur DOM, menghitung nilai baru, menetapkan status, dan menjamin satu kali penggambaran yang bersih.

Catatan tentang Kinerja

Karena useLayoutEffect berjalan secara sinkron sebelum tampilan dan dapat memicu perenderan tambahan, penggunaan yang berlebihan dapat menurunkan kinerja. Jika pekerjaan sinkronnya berat, peramban tidak dapat menampilkan apa pun sehingga menyebabkan tampilan tersendat. Gunakan ini hanya ketika Anda perlu mencegah kedipan visual; gunakan useEffect untuk hal lainnya.

Pemanggilan Ganda dalam Mode Ketat

Dalam Mode Ketat React (hanya dalam pengembangan), useLayoutEffect dan useEffect sama-sama dipanggil dua kali setiap kali dipasang. Urutannya adalah: dipasang, dibersihkan, lalu dipasang lagi. Hal ini membantu mendeteksi efek yang tidak dibersihkan dengan benar. Pemanggilan ganda tidak terjadi dalam build produksi.

Aturan Kinerja: Gunakan useEffect secara Bawaan

Pilihan bawaan harus selalu useEffect. Beralihlah ke useLayoutEffect hanya jika Anda dapat mengamati dan mereproduksi kedipan visual atau masalah tata letak yang salah. Penggunaan useLayoutEffect secara berlebihan akan menghambat alur penggambaran peramban tanpa alasan dan dapat menurunkan kinerja yang dirasakan.

Catatan SSR: useLayoutEffect di Server

useLayoutEffect tidak dapat berjalan di server karena tidak ada DOM atau siklus penggambaran peramban dalam lingkungan server. Jika digunakan dalam komponen yang dirender di server, React mengeluarkan peringatan. Perbaikannya adalah melewati efek secara kondisional: periksa typeof window !== 'undefined' atau beralih ke useEffect untuk kode yang kompatibel dengan SSR.

Menentukan yang Harus Digunakan

Tanyakan kepada diri sendiri: "Apakah efek ini mengubah sesuatu yang akan dilihat pengguna pada tampilan pertama?" Jika ya, gunakan useLayoutEffect untuk mencegah kedipan. Jika tidak—untuk pengambilan data, langganan, analitik, pencatatan, dan sebagian besar efek samping lainnya—gunakan useEffect. Kerangka keputusan ini mencakup sebagian besar kasus di dunia nyata.

Sifat Sinkron useLayoutEffect

useLayoutEffect berjalan dalam blok sinkron yang sama dengan mutasi DOM. React tidak dapat memproses pekerjaan lain (seperti merespons peristiwa pengguna) saat useLayoutEffect sedang berjalan. Karena itu, efek ini harus cepat dan terarah. Kode sinkron yang berjalan lama dalam useLayoutEffect secara langsung menunda peramban untuk merender tampilan ke layar.

Waktu useLayoutEffect

Kapan tepatnya useLayoutEffect dijalankan relatif terhadap mutasi DOM dan penggambaran peramban?

Ringkasan Pelajaran: useLayoutEffect vs useEffect

useLayoutEffect berjalan secara sinkron dan dijalankan sebelum penggambaran peramban, sehingga cocok untuk pengukuran DOM dan perbaikan visual. useEffect dijalankan setelah penggambaran dan merupakan pilihan yang tepat untuk pengambilan data, langganan, dan sebagian besar efek samping. Gunakan useEffect sebagai pilihan bawaan dan beralih hanya ketika kedipan visual mengonfirmasi bahwa useLayoutEffect diperlukan. Hindari penggunaannya dalam SSR tanpa penjagaan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kapan useLayoutEffect Berjalan dibandingkan useEffect” gratis?

Ya — teks lengkap “Kapan useLayoutEffect Berjalan dibandingkan useEffect” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kapan useLayoutEffect Berjalan dibandingkan useEffect”?

Pelajari bahwa useLayoutEffect berjalan secara sinkron setelah mutasi DOM, tetapi sebelum browser melakukan pengecatan. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Kapan useLayoutEffect Berjalan dibandingkan useEffect” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Fase Rendering dan Commit DOM
  2. Kapan useLayoutEffect Berjalan dibandingkan useEffect
  3. Mengukur Elemen DOM dengan useLayoutEffect
  4. Menghindari Beban Tata Letak dan Kedipan Visual
← Kembali ke React Academy