createRoot
createRoot memungkinkan Anda untuk membuat sebuah akar untuk menampikan komponen React dalam node DOM pada peramban.
const root = createRoot(domNode, options?)- Referensi
- Penggunaan
- Pemecahan masalah
- Saya telah membuat sebuah akar, namun tidak ada yang tampil
- Saya mendapatkan pesan kesalahan: “You passed a second argument to root.render”
- Saya mendapatkan pesan kesalahan: “Target container is not a DOM element”
- Saya mendapatkan pesan kesalahan: “Functions are not valid as a React child.”
- HTML yang di-render oleh server selalu dibuat ulang dari awal
Referensi
createRoot(domNode, options?)
Panggil createRoot untuk membuat akar React untuk menampilkan konten di elemen DOM pada peramban.
import { createRoot } from 'react-dom/client';
const domNode = document.getElementById('root');
const root = createRoot(domNode);React akan membuat sebuah akar untuk domNode dan mengambil alih pengelolaan DOMnya. Setelah Anda membuat akar, Anda harus memanggil root.render untuk menampilkan komponen React di dalam DOM tersebut:
root.render(<App />);Aplikasi yang sepenuhnya dibuat dengan React biasanya cukup memanggil createRoot sekali saja untuk komponen akarnya. Sedangkan untuk halaman yang “dihiasi” oleh bagian yang menggunakan React mungkin dapat memiliki akar sebanyak yang diperlukan.
Lihat contoh-contoh lainnya di bawah ini.
Parameter
-
domNode: Sebuah elemen DOM. React akan membuat akar untuk elemen DOM ini dan memungkinkan Anda untuk memanggil fungsi lain pada akar, sepertirenderuntuk menampilkan konten React yang sudah di-render. -
opsional
options: Sebuah objek dengan opsi-opsi berikut untuk akar React ini.- opsional
onCaughtError: Callback yang dipanggil saat React menangkap error di Error Boundary. Dipanggil denganerroryang ditangkap oleh Error Boundary, dan objekerrorInfoberisicomponentStack. - optional
onUncaughtError: Callback yang dipanggil saat error dilempar dan React tidak ditangkap oleh Error Boundary. Dipanggil denganerroryang dilempar, dan objekerrorInfoberisicomponentStack. - opsional
onRecoverableError: Callback yang dipanggil saat React berhasil pulih secara otomatis dari error. Dipanggil denganerroryang dikembalikan React, dan obyekerrorInfoberisicomponentStack. Beberapa error yang dapat dipulihkan mungkin akan berisi kesalahan aslinya sebagaierror.cause. - opsional
identifierPrefix: Awalan string yang digunakan React untuk ID yang dihasilkan olehuseId. Berguna untuk mencegah konflik saat menggunakan banyak akar pada halaman yang sama.
- opsional
createRoot mengembalikan sebuah objek dengan dua method: render dan unmount.
Catatan Penting
- Jika aplikasi Anda di-render oleh server, penggunaan
createRoot()tidak didukung. Sebagai gantinya, gunakanhydrateRoot(). - Anda mungkin hanya akan memiliki satu panggilan
createRootpada aplikasi Anda. Jika Anda menggunakan framework, biasanya pemanggilan fungsi ini sudah dilakukan oleh framework tersebut. - Saat Anda ingin me-render sebagian JSX pada bagian lain dari pohon DOM yang bukan turunan dari komponen Anda (contohnya modal atau tooltip), gunakan
createPortal, bukancreateRoot.
root.render(reactNode)
Panggil root.render untuk menampilkan sebuah JSX (“React node”) dalam node DOM milik akar React pada peramban.
root.render(<App />);React akan menampilkan <App /> dalam root, dan mengambil alih pengelolaan DOM di dalamnya.
Lihat contoh-contoh lainnya di bawah ini.
Parameter
reactNode: Sebuah React Node yang Anda ingin tampilkan. Biasanya berupa sebuah JSX seperti<App />, namun Ada juga dapat memberikan sebuah elemen React yang dibuat dengancreateElement(), sebuah string, sebuah angka (number),nullatauundefined.
Kembalian
root.render mengembalikan undefined.
Catatan Penting
-
Pada pemanggilan
root.renderpertama kali, React akan menghapus seluruh konten HTML yang ada pada akar React, sebelum me-render komponen React di dalamnya. -
Jika node DOM akar Anda memiliki HTML yang dibuat oleh React pada server, atau proses build, gunakan
hydrateRoot()agar event handler dapat dikaitkan dengan HTML yang ada. -
Jika Anda memanggil
renderpada akar yang sama berulang kali, React akan memperbarui DOM sebisa mungkin hingga menyamai JSX terakhir yang Anda berikan. React akan memutuskan bagian mana dari DOM yang dapat digunakan kembali dan bagian mana yang perlu dibuat ulang, dengan melakukan “pencocokan” dengan pohon yang telah di-render sebelumnya. Pemanggilan kembalirenderdi akar yang sama mirip dengan memanggil fungsisetpada komponen akar: React menghindari pembaharuan DOM yang tidak diperlukan. -
Although rendering is synchronous once it starts,
root.render(...)is not. This means code afterroot.render()may run before any effects (useLayoutEffect,useEffect) of that specific render are fired. This is usually fine and rarely needs adjustment. In rare cases where effect timing matters, you can wraproot.render(...)influshSyncto ensure the initial render runs fully synchronously.const root = createRoot(document.getElementById('root'));root.render(<App />);// 🚩 The HTML will not include the rendered <App /> yet:console.log(document.body.innerHTML);
root.unmount()
Panggil root.unmount untuk memusnakan pohon yang telah di-render dalam akar React.
root.unmount();Sebuah aplikasi yang dibuat sepenuhnya dengan React biasanya tidak perlu memanggil root.unmount.
Fungsi ini biasanya berguna saat node DOM pada akar React (atau turunan lainnya) mungkin dapat terhapus dari DOM oleh kode lain. Sebagai contoh, bayangkan sebuah panel tab jQuery yang menghapus tab nonaktif dari DOM. Jika tab tersebut terhapus, seluruh isi dari DOM tersebut (termasuk akar React) juga akan ikut terhapus. Pada kasus ini, Anda perlu memberitahukan React untuk “stop” mengelola konten DOM akar yang terhapus dengan memanggil root.unmount. Jika tidak, komponen yang ada di dalam akar tersebut tidak tahu kalau mereka harus membersihkan dan membebaskan resources global seperti subscriptions.
Memanggil root.unmount akan meng-unmount seluruh komponen di dalam akar, dan “melepaskan” React dari dalam node DOM akar, termasuk menghapus event handlers dan state yang ada pada pohon.
Parameter
root.unmount tidak menerima parameter apapun.
Kembalian
root.unmount mengembalikan undefined.
Catatan penting
-
Pemanggilan
root.unmountakan meng-unmount seluruh komponen pada pohon dan “melepaskan” React dari node DOM akar. -
Begitu Anda memanggil
root.unmount, Anda tidak dapat memanggilroot.renderkembali pada akar yang sama. Percobaan memanggilroot.renderpada akar yang sudah di-unmount akan menyebabkan kesalahan “Cannot update an unmounted root”. Walaupun begitu, Anda dapat membuat akar yang baru untuk node DOM yang sama setelah node pada akar sebelumnya telah di-unmount.
Penggunaan
Me-render aplikasi yang dibuat sepenuhnya dengan React
Jika aplikasi Anda dibuat sepenuhnya dengan React, buatlah sebuah akar untuk seluruh bagian aplikasi Anda.
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));
root.render(<App />);Biasanya, Anda cukup menjalankan kode ini sekali saja pada startup. Kode ini akan:
- Mencari node DOM pada peramban, yang didefinisikan di HTML Anda.
- Menampilkan komponen React untuk aplikasi Anda didalamnya.
import { createRoot } from 'react-dom/client'; import App from './App.js'; import './styles.css'; const root = createRoot(document.getElementById('root')); root.render(<App />);
Jika aplikasi Anda dibuat sepenuhnya dengan React, Anda seharusnya tidak perlu membuat akar-akar lainnya, atau memanggil root.render kembali.