0Pricing
React Academy · Pelajaran

Membangun Komponen Modal dengan Portal

Buat modal yang dapat digunakan kembali dan dirender ke document.body melalui createPortal.

Membangun Komponen Modal dengan Portal 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.

Selamat Datang

Dalam pelajaran ini, Anda akan membangun komponen Modal yang dapat digunakan ulang dan menggunakan React.createPortal untuk merender ke document.body, dengan dukungan penutupan melalui klik latar belakang dan tombol Escape.

Kerangka Komponen Modal

Mulailah dengan struktur dasar: komponen Modal yang menerima properti `isOpen`, `onClose`, dan `children`. Saat `isOpen` bernilai false, jangan merender apa pun.
function Modal({ isOpen, onClose, children }) {
  if (!isOpen) return null;
  return createPortal(
    <div className="backdrop" onClick={onClose}>
      <div className="modal" onClick={e => e.stopPropagation()}>
        {children}
      </div>
    </div>,
    document.body
  );
}

Latar Belakang & Penghentian Propagasi

Elemen div `backdrop` bagian luar menutupi seluruh layar. Saat diklik, elemen tersebut memanggil `onClose`. Elemen div `modal` bagian dalam memanggil `e.stopPropagation()` agar klik di dalam modal tidak merambat ke latar belakang dan menutupnya secara tidak sengaja.

Menutup dengan Tombol Escape

Tambahkan `useEffect` yang mendengarkan peristiwa `keydown`. Saat tombol Escape ditekan dan modal terbuka, panggil `onClose`. Hapus pendengar saat pembersihan.
useEffect(() => {
  if (!isOpen) return;
  const handle = (e) => { if (e.key === 'Escape') onClose(); };
  document.addEventListener('keydown', handle);
  return () => document.removeEventListener('keydown', handle);
}, [isOpen, onClose]);

Mencegah Pengguliran Halaman

Saat modal terbuka, biasanya Anda ingin mencegah halaman di belakangnya bergulir. Tambahkan dan hapus `overflow: hidden` pada `document.body` di dalam `useEffect`.
useEffect(() => {
  if (isOpen) {
    document.body.style.overflow = 'hidden';
  }
  return () => { document.body.style.overflow = ''; };
}, [isOpen]);

CSS Dasar untuk Modal

Latar belakang harus berupa lapisan tetap yang menutupi seluruh layar. Kotak modal harus berada di tengah. Pendekatan CSS minimal menggunakan tata letak fleksibel pada latar belakang untuk menengahkan modal.
.backdrop {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.5);
  display: flex; align-items: center; justify-content: center;
  z-index: 1000;
}
.modal {
  background: white;
  border-radius: 8px;
  padding: 24px;
  min-width: 320px;
}

Menggunakan Modal

Kendalikan modal dengan variabel status boolean pada induknya. Teruskan properti `isOpen` dan `onClose` ke Modal. Masukkan konten apa pun sebagai elemen anak.
function App() {
  const [open, setOpen] = useState(false);
  return (
    <>
      <button onClick={() => setOpen(true)}>Open Modal</button>
      <Modal isOpen={open} onClose={() => setOpen(false)}>
        <h2>Hello from the modal!</h2>
        <button onClick={() => setOpen(false)}>Close</button>
      </Modal>
    </>
  );
}

Menambahkan Tombol Tutup di Dalam Modal

Selalu sediakan tombol tutup khusus di dalam modal bagi pengguna yang tidak dapat menggunakan keyboard atau tidak menyadari adanya latar belakang. Teruskan `onClose` ke konten melalui elemen anak atau properti.

Animasi dengan Transisi CSS

Untuk menghasilkan efek muncul perlahan, jangan mengembalikan null saat modal tertutup; selalu render portal, tetapi alihkan kelas CSS. Gunakan transisi CSS `opacity` dan `transform` pada latar belakang.
// Toggle class based on isOpen
<div className={`backdrop ${isOpen ? 'visible' : 'hidden'}`}>

Menyusun Header & Footer Modal

Pecah modal menjadi subkomponen: `Modal.Header`, `Modal.Body`, `Modal.Footer`. Gunakan pola komponen gabungan agar pengguna dapat menyusun tata letak modal tanpa perlu mengetahui nama kelas.

Pemeriksaan Singkat

Mengapa kita memanggil e.stopPropagation() pada penangan onClick div modal bagian dalam?

Ringkasan

Anda telah membangun Modal dengan createPortal: klik latar belakang menutupnya, tombol Escape menutupnya, pengguliran halaman dikunci saat modal terbuka, dan stopPropagation mencegah klik di dalam modal menutupnya.

Berikutnya

Pelajaran berikutnya: **Menangani Fokus & Perangkap Keyboard dalam Modal** — Anda akan menjaga fokus tetap berada di dalam modal saat terbuka untuk memenuhi persyaratan aksesibilitas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun Komponen Modal dengan Portal” gratis?

Ya — teks lengkap “Membangun Komponen Modal dengan Portal” 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 “Membangun Komponen Modal dengan Portal”?

Buat modal yang dapat digunakan kembali dan dirender ke document.body melalui createPortal. 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 “Membangun Komponen Modal dengan Portal” 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. Apa Itu React Portal?
  2. Membangun Komponen Modal dengan Portal
  3. Menangani Fokus dan Perangkap Keyboard dalam Modal
  4. Tooltip dan Menu Dropdown dengan Portal
← Kembali ke React Academy