CodeBlanks Logo Icon CodeBlanks

Modal örneği

Portal ile taşma sorunları olmayan bir modal yazmayı öğrenirsin.

Modal örneği

Bu derste tam bir modal örneği yazacaksın. Modal, bir açık/kapalı state ile kontrol edilir; açıkken portal ile çizilir, kapalıyken hiç çizilmez. Kullanıcı arka planı tıklarsa modal kapanır.

Modal bileşeni iki öğe çizer: arka plan örtüsü ve içerik kutusu. Örtü yarı saydamdır ve ekranı kaplar; içerik kutusu ortalanmıştır.

State yönetimi üst bileşendedir; modal yalnızca çizim yapar. Bu ayrım modalı yeniden kullanılabilir yapar.

Arka plan örtüsü

Modalın arka plan örtüsü (backdrop) yarı saydam bir katmandır. Ekranı kaplar ve içerik kutusunun arkasında durur. Tıklayınca modalı kapatır; içerik kutusuna tıklamak kapatmaz.

Bu ayrım için içerik kutusuna stopPropagation eklenir; böylece tıklama örtüye yayılmaz. Ya da örtü ve içerik ayrı tıklama işleyicileri kullanır.

Örtü genellikle position: fixed ve inset: 0 ile tüm ekranı kaplar.

Uygulama Modal bileşeni

Aşağıdaki iskeleti tamamla. Modal bileşeni yaz; { open, onClose, children } alsın, open yanlışsa null döndürsün, değilse createPortal ile <div className="modal" onClick={onClose}> içinde {children} çizsin. Dışa aktar.

Başlangıç kodu

App.jsx
import { createPortal } from "react-dom";

// Modal bileşenini buraya yaz

Örnek çözüm

App.jsx
import { createPortal } from "react-dom";

function Modal({ open, onClose, children }) {
  if (!open) return null;
  return createPortal(
    <div className="modal" onClick={onClose}>{children}</div>,
    document.getElementById("modal-root")
  );
}

export default Modal;

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Modal ne ile kontrol edilir?

  • useRef
  • useMemo
  • useState Doğru cevap
  • useEffect

Açıklama: Modal açık/kapalı state ile kontrol edilir.

2 Modal açıkken

Soru
if (!open) return null;
return createPortal(<div className="modal" onClick={____}><div className="content">{children}</div></div>, modalRoot);
Cevap
if (!open) return null;
return createPortal(<div className="modal" onClick={onClose}><div className="content">{children}</div></div>, modalRoot);

Açıklama: Arka plan tıklanınca onClose çağrılır, modal kapanır.

3 Modal örneği: kavramları eşleştir

Kavram Anlamı
createPortal Farklı düğüme çizer
open Açık/kapalı state
onClose Kapatma işleyici
backdrop Arka plan örtüsü

Orta seviye bölümündeki tüm dersler