0Pricing
React Academy · Ders

Portallarla İpuçları ve Açılır Menüler

overflow-hidden kapsayıcılarının dışına taşan ipuçlarını ve açılır menüleri oluşturmak için portalları kullanın.

Portallarla İpuçları ve Açılır Menüler, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.

Hoş Geldiniz

Bu derste, üst bileşenlerin overflow-hidden ve z-index yığınlama bağlamı kısıtlamalarından kurtularak document.body içinde oluşturulması için React Portals kullanan araç ipucu ve açılır menü bileşenleri geliştireceksiniz.

Overflow Sorunu

Tetikleyici düğmesine göre konumlandırılan bir araç ipucu, herhangi bir üst bileşende `overflow: hidden` veya `overflow: scroll` varsa kırpılır. Araç ipucunu portal aracılığıyla document.body içine taşımak bu sorunu tamamen çözer.

Konumlandırma Stratejisi

Portal ile oluşturulan bir araç ipucunu doğru konumlandırmak için tetikleyici öğenin sınırlayıcı dikdörtgenini `getBoundingClientRect()` ile ölçün ve kaydırma konumunu hesaba katan mutlak koordinatları hesaplayın.
const rect = triggerRef.current.getBoundingClientRect();
const top = rect.bottom + window.scrollY + 8;
const left = rect.left + window.scrollX;

Araç İpucu Bileşeni

Alt öğelerini saran, tetikleyiciye bir ref ekleyen ve üzerine gelindiğinde konumlandırılmış bir araç ipucu kutusunu portal ile oluşturan bir Tooltip geliştirin.
function Tooltip({ content, children }) {
  const [visible, setVisible] = useState(false);
  const [pos, setPos] = useState({ top: 0, left: 0 });
  const ref = useRef();

  const show = () => {
    const r = ref.current.getBoundingClientRect();
    setPos({ top: r.bottom + window.scrollY + 4,
             left: r.left + window.scrollX });
    setVisible(true);
  };

  return (
    <span ref={ref} onMouseEnter={show} onMouseLeave={() => setVisible(false)}>
      {children}
      {visible && createPortal(
        <div style={{ position:'absolute', top: pos.top, left: pos.left }}
             className="tooltip">{content}</div>,
        document.body
      )}
    </span>
  );
}

Kaydırma ve Yeniden Boyutlandırmada Konumu Güncelleme

Bir araç ipucu görünürken kullanıcı sayfayı kaydırırsa konumu güncelliğini yitirir. Konumu yeniden hesaplamak veya araç ipucunu kapatmak için `scroll` ve `resize` olaylarını dinleyin.
useEffect(() => {
  if (!visible) return;
  const update = () => setVisible(false);
  window.addEventListener('scroll', update, true);
  window.addEventListener('resize', update);
  return () => {
    window.removeEventListener('scroll', update, true);
    window.removeEventListener('resize', update);
  };
}, [visible]);

Açılır Menü Mimarisi

Bir açılır menü, araç ipucuyla aynı kalıbı izler. Tetikleyici düğme menüyü gösterir veya gizler, menü portal aracılığıyla oluşturulur ve dışarıya tıklama işleyicisi menüyü kapatır.

Dışarıya Tıklama İşleyicisi

Menünün dışına yapılan tıklamaları algılamak için `document` üzerinde bir `mousedown` dinleyicisi kullanın. Kapatılıp kapatılmayacağına karar vermek için tıklanan hedefi menü ve tetikleyici ref'leriyle karşılaştırın.
useEffect(() => {
  if (!open) return;
  const handler = (e) => {
    if (!menuRef.current?.contains(e.target) &&
        !triggerRef.current?.contains(e.target)) {
      setOpen(false);
    }
  };
  document.addEventListener('mousedown', handler);
  return () => document.removeEventListener('mousedown', handler);
}, [open]);

Açılır Menülerde Klavye Gezinmesi

Menü öğeleri arasında gezinmek için ArrowDown/ArrowUp, seçim yapmak için Enter ve kapatmak için Escape uygulayın. Odaklanmış dizini durumda izleyin ve menü öğelerinde programlı olarak `.focus()` çağrısı yapın.

Konumlandırma Kitaplığı Kullanma

Üretim ortamında **@floating-ui/react** (eski adıyla Popper.js) kullanın. Bu kitaplık, görünüm alanı kenarlarına yaklaşıldığında çevirme, araç ipucunu görünür tutma amacıyla kaydırma ve ok konumlandırma işlemlerini otomatik olarak yönetir.
import { useFloating, flip, shift } from '@floating-ui/react';

const { refs, floatingStyles } = useFloating({
  middleware: [flip(), shift()],
});

Erişilebilirlik: Araç İpuçları için ARIA

Araç ipuçları için araç ipucu öğesine `role='tooltip'` ekleyin ve tetikleyicideki `aria-describedby` özniteliğini araç ipucunun id'sine yönlendirin. Bu, ekran okuyucuların araç ipucu içeriğini duyurmasını sağlar.
<button aria-describedby="tip1">Hover me</button>
{visible && createPortal(
  <div id="tip1" role="tooltip">Helpful text</div>,
  document.body
)}

Kısa Kontrol

Portal ile oluşturulan bir araç ipucunun doğru ekran konumunu nasıl hesaplarsınız?

Özet

Portallar, araç ipuçlarının ve açılır menülerin taşması gizlenmiş üst bileşenlerden çıkmasını sağlar. Tetikleyiciyi getBoundingClientRect ile ölçün, mutlak konumlandırma için kaydırma uzaklıklarını ekleyin, dışarı tıklama ve kaydırma durumunda kapatın ve erişilebilirlik için ARIA öznitelikleri ekleyin.

Kurs Tamamlandı

Tebrikler! **React'te Portallar ve Modal Pencereler** kursunu tamamladınız. Artık CSS yığınlama kısıtlamalarından bağımsız olarak erişilebilir ve doğru konumlandırılmış modal pencereler, araç ipuçları ve açılır menüler oluşturabilirsiniz.

Sıkça Sorulan Sorular

“Portallarla İpuçları ve Açılır Menüler” dersi ücretsiz mi?

Evet — “Portallarla İpuçları ve Açılır Menüler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.

“Portallarla İpuçları ve Açılır Menüler” dersinde ne öğreneceğim?

overflow-hidden kapsayıcılarının dışına taşan ipuçlarını ve açılır menüleri oluşturmak için portalları kullanın. React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

React Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Portallarla İpuçları ve Açılır Menüler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu React Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. React Portalları Nedir
  2. Portallarla Modal Bileşeni Oluşturma
  3. Modallarda Odağı ve Klavye Kapanlarını Yönetme
  4. Portallarla İpuçları ve Açılır Menüler
← React Academy Sayfasına Dön