ViraStack
  • Akademi
  • Hakkında
  • Destek
Genel BakışKaynaklarKatkı
ViraStack

Frontend ekosistemi: ücretsiz rehberler, proje şablonları, AI kuralları ve form bileşenleri.

Ürünler

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Keşfet

  • Akademi
  • Hakkında
  • Marka
  • Destek

© 2026 ViraStack.

Açık kaynak · MIT

React

06 / 12

Ref ve DOM

Render tetiklemeyen değerler, DOM erişimi, ref prop'u, ref callback cleanup ve Fragment ref'leri.

Ref Nedir

Ref, render'lar arasında saklanan ama değiştiğinde render tetiklemeyen bir kutudur. useRef bir obje döndürür; değer current alanındadır.1

StateRef
DeğişinceRender tetiklerRender tetiklemez
DeğiştirmeSetter ileref.current = ...
Render'da okumaSerbestOkunmamalı
KullanımEkranda görünen veriZamanlayıcı id'si, DOM elemanı, önceki değer

React dokümanı ref'i bir kaçış kapısı olarak tanımlar: React dışındaki bir şeyle konuşurken kullanılır. Uygulamanın mantığı ref'lerden akıyorsa yaklaşımı gözden geçirin.1

Uyarı

Render sırasında ref.current'i okumayın ya da yazmayın. Değer ekranda bir şeyi belirliyorsa state olmalıdır. eslint-plugin-react-hooks'un refs kuralı bunu yakalar.21

DOM Elemanına Erişmek

Çoğu iş deklaratif yapılır, ama bazı şeylerin JSX karşılığı yoktur: odaklanmak, bir yere kaydırmak, video oynatmak, eleman ölçmek. Bunun için ref'i JSX'teki ref attribute'una verirsiniz; React DOM elemanını current'a koyar.3

import { useRef } from "react";

export function SearchBox() {
  const inputRef = useRef<HTMLInputElement>(null);

  return (
    <>
      <input ref={inputRef} type="search" placeholder="Ürün ara" />
      <button onClick={() => inputRef.current?.focus()}>Ara</button>
    </>
  );
}

current ilk render'da null'dır; React ref'i commit sırasında, DOM'u güncelledikten sonra bağlar. Bu yüzden ref'lere event handler'larda ya da Effect'lerde erişilir.3

Kendi Component'inize ref Vermek

React 19'dan beri ref fonksiyon component'lerde sıradan bir prop'tur. forwardRef artık gerekmez ve ileride kaldırılacak.4

function TextField({ ref, ...props }: React.ComponentProps<"input">) {
  return <input ref={ref} className="text-field" {...props} />;
}

<TextField ref={inputRef} placeholder="E-posta" />;

Ebeveynin DOM elemanının tamamına değil, yalnızca birkaç metoda erişmesini istiyorsanız useImperativeHandle ile küçük bir API açabilirsiniz. Bunu seyrek kullanın; open() ve close() gibi metotlar yerine isOpen gibi bir prop çoğu zaman daha iyidir.35

Yapma

  • React'in yönettiği DOM'u ref ile değiştirmek: elemanı silmek, içine çocuk eklemek. React bir sonraki render'da DOM'u kendi bildiği hâle getirmeye çalışır ve hata verir. Ref'le yalnızca React'in dokunmadığı şeyleri yapın (odak, kaydırma, ölçme).3

Ref Callback ve Cleanup

ref'e obje yerine bir fonksiyon da verebilirsiniz. React elemanı DOM'a ekleyince fonksiyonu elemanla çağırır. React 19'da bu fonksiyon bir cleanup döndürebilir; eleman kaldırılınca çağrılır.64

function measure(node: HTMLElement) {
  const observer = new ResizeObserver(([entry]) => {
    console.log("Kart genişliği:", entry.contentRect.width);
  });
  observer.observe(node);
  return () => observer.disconnect();
}

<article ref={measure}>...</article>;

TkDodo'nun ref callback ile Effect arasındaki kuralları:7

  • DOM elemanına ihtiyacınız varsa ref callback tercih edin; useRef + useEffect'ten kısadır ve ebeveynin değil, elemanın render'ına bağlıdır. Fonksiyon component'e bağlı değilse yukarıdaki gibi component dışına taşıyın; her render'da yeniden oluşmaz.

  • Elemanla ilgisi olmayan bir yan etki (örneğin document.title) için ref kullanmayın; Effect daha anlaşılırdır.

  • Asenkron işler için ikisi de değil; veri çekme kütüphanesi.

Strict Mode, ref callback'leri de development'ta bir kez fazladan kurup söker; cleanup eksikse burada görürsünüz.6

Fragment Ref'leri

React 19.3 ile <Fragment>'e ref verilebiliyor. Sarmalayıcı bir <div> eklemeden, bir component'in render ettiği kardeş elemanların hepsiyle grup olarak çalışırsınız. Dönen FragmentInstance odak (focus, focusLast, blur), event listener ekleme ve IntersectionObserver/ResizeObserver bağlama gibi metotlar sunar.89

import { Fragment, useEffect, useRef } from "react";

function FocusTrap({ children }: { children: React.ReactNode }) {
  const fragmentRef = useRef<React.FragmentInstance>(null);

  useEffect(() => {
    fragmentRef.current?.focus(); // ilk odaklanabilir çocuğa odaklan
  }, []);

  return <Fragment ref={fragmentRef}>{children}</Fragment>;
}

Bu özellikle elinizde olmayan component'lere (bir kütüphanenin listesi gibi) davranış eklerken işe yarar; component'in iç yapısını değiştirmeniz gerekmez.8 Odak yönetiminin erişilebilirlik tarafı Klavye ve odak yönetimi dersinde.

Portal

Modal, tooltip ve toast gibi elemanlar görsel olarak sayfanın en üstünde durmalıdır, ama component ağacında onları açan component'in yanında yaşar. createPortal, JSX'i DOM'da başka bir yere (genellikle document.body) render eder; event'ler ve context React ağacındaki yerine göre çalışmaya devam eder.10 Basit diyaloglar için önce yerleşik <dialog> elemanına bakın; HTML dersi anlatıyor.

Kendin Dene

  • SearchBox'a sayfa açılınca input'a odaklanma ekleyin. Önce useEffect ile, sonra ref callback ile yazın.

  • Bir ürün kartının genişliğini ResizeObserver ile ölçen ref callback'i yazın; cleanup'ı silip kartı birkaç kez gizleyip gösterin.

  • Render sırasında inputRef.current?.value'yu ekrana basmayı deneyin ve lint'in uyarısını okuyun.

  • Bir listeyi saran <div>'i kaldırıp yerine Fragment ref'i ile "görünür olunca logla" davranışı ekleyin.

Detaylı Öğrenmek İçin

  • Resmi doküman: "Referencing Values with Refs" ve "Manipulating the DOM with Refs"; ikisi birlikte ref konusunun tamamı.13

  • Yazı: TkDodo'nun ref callback'leri React 19 ve compiler ile yeniden değerlendirdiği yazı.7

  • Resmi doküman: React 19.3 duyurusunun Fragment Refs bölümü; InView örneği.8

Kaynaklar

  • 1DokümanReact: Referencing Values with Refs

    Ref ile state farkı, ne zaman kullanılacağı ve render'da okumama.

  • 2DokümanReact: refs lint

    Render sırasında `ref.current` okuma ve yazmayı yakalayan kural.

  • 3DokümanReact: Manipulating the DOM with Refs

    Odak, kaydırma, ref'in ne zaman bağlandığı ve React'in DOM'unu değiştirmeme.

  • 4DokümanReact v19

    `ref`'in prop olması, `forwardRef`'in kaldırılacağı ve ref callback cleanup'ı.

  • 5DokümanReact: useImperativeHandle

    Sınırlı bir ref API'si açmak ve prop ile ifade edilebileni ref'e koymamak.

  • 6DokümanReact: Common components, ref callback

    Ref callback'in çağrılma zamanı, cleanup ve Strict Mode davranışı.

  • 7MakaleTkDodo

    : — 8 Aralık 2024. `ResizeObserver` ile cleanup ve ref callback ya da Effect seçimi.

  • 8DokümanReact Blog: React 19.3

    9 Eylül 2026. Fragment Refs'in kararlı olması ve `FragmentInstance` metotları.

  • 9DokümanReact: Fragment

    `<Fragment ref>` ve `FragmentInstance` referansı.

  • 10DokümanReact: createPortal

    DOM'da başka bir yere render etmek, event ve context davranışı.

Bu sayfayı düzenle

Son güncelleme tarihi: 21 Ekim 2026

Önceki adım05. Effect ve ne zaman gerekmezSonraki adım07. Context