Yükleniyor...

Refs

React'te Refs, DOM öğelerine veya bileşen örneklerine doğrudan erişim sağlamak için kullanılan güçlü bir araçtır. Refs, özellikle input odaklama, metin seçimi, medya oynatma veya üçüncü taraf kütüphanelerle entegrasyon gibi doğrudan DOM etkileşimi gerektiren senaryolarda önemlidir. Refs kullanımı, uygulamanın performansını artırırken gereksiz render işlemlerini önler ve bileşenlerin yönetimini kolaylaştırır.
Refs, fonksiyonel bileşenlerde useRef hook'u ile, sınıf bileşenlerinde ise React.createRef yöntemiyle oluşturulabilir. Bu referanslar, bir DOM öğesi veya bileşen örneğine birkaç render boyunca kalıcı bir erişim sağlar ve React’in tek yönlü veri akışını bozmadan çalışır. Bu kavramlar, React’in bileşen mimarisi, durum yönetimi (state), veri akışı ve yaşam döngüsü (lifecycle) ile doğrudan bağlantılıdır.
Bu eğitim içeriğinde, Refs’in fonksiyonel ve sınıf bileşenlerinde nasıl etkin kullanılacağını, DOM ile programatik etkileşimleri ve modern SPA'larda kullanıcı deneyimini optimize etmeyi öğreneceksiniz. Ayrıca forwardRef gibi ileri seviye patternler de ele alınacak; bu patternler, prop drilling’i önleyerek gereksiz render’ları azaltır ve tekrar kullanılabilir bileşenler oluşturmanıza olanak tanır.

Temel Örnek

jsx
JSX Code
import React, { useRef } from 'react';

function InputFocus() {
const inputRef = useRef(null);

const handleFocus = () => {
inputRef.current.focus();
};

return ( <div> <input ref={inputRef} type="text" placeholder="Metin girin..." /> <button onClick={handleFocus}>Input’a Odaklan</button> </div>
);
}

export default InputFocus;

Bu örnekte InputFocus bileşeni bir input ve buton render eder. useRef ile oluşturulan inputRef, input elementine ref özelliği ile bağlanır. Butona tıklandığında handleFocus fonksiyonu çalışır ve inputRef.current.focus() ile input alanına odaklanılır. Bu kullanım, DOM ile doğrudan etkileşimi sağlarken gereksiz render’ları önler ve prop drilling sorununu azaltır. Refs, karmaşık bileşen mantığını kapsüllemeye ve DOM’a erişim gerektiren üçüncü taraf kütüphanelerle entegrasyona olanak tanır. useEffect ile birleştirildiğinde, bileşen yaşam döngüsü ile senkronize çalışarak stabil ve öngörülebilir bir etkileşim sağlar.

Pratik Örnek

jsx
JSX Code
import React, { useRef, useEffect, useState } from 'react';

function ScrollList() {
const listRef = useRef(null);
const [items, setItems] = useState(Array.from({ length: 20 }, (_, i) => `Öğe ${i + 1}`));

useEffect(() => {
if (listRef.current) {
listRef.current.lastElementChild.scrollIntoView({ behavior: 'smooth' });
}
}, [items]);

const addItem = () => {
setItems(prev => [...prev, `Öğe ${prev.length + 1}`]);
};

return ( <div>
<ul ref={listRef} style={{ maxHeight: '200px', overflowY: 'auto' }}>
{items.map((item, index) => ( <li key={index}>{item}</li>
))} </ul> <button onClick={addItem}>Öğe Ekle</button> </div>
);
}

export default ScrollList;

ScrollList örneği, Refs’in gerçek dünya uygulamasını gösterir. listRef, UL elementine bağlanır ve items state’i değiştiğinde useEffect son elementi görünür alana kaydırır. Bu pattern, Refs, state yönetimi ve yaşam döngüsü kavramlarını birleştirir, kullanıcı deneyimini iyileştirir. Chat uygulamaları, log panelleri veya kaydırılabilir listeler için idealdir. current özelliğinin varlığını kontrol etmek, Refs’i hook’larla kombinlemek ve DOM’a doğrudan müdahaleyi yaşam döngüsü dışında yapmamak önemlidir. Doğru Refs kullanımı, performansı artırır, bakımı kolaylaştırır ve UX’i geliştirir.

Refs kullanımı için en iyi uygulamalar: useRef’i fonksiyonel bileşenlerde tercih edin, state’i doğrudan Refs ile değiştirmeyin, yalnızca gerekli olduğu durumlarda DOM’a erişim sağlayın. Yaygın hatalar: state yerine Refs kullanmak, DOM’u lifecycle dışında değiştirmek, gereksiz render’lar oluşturmak. Performans optimizasyonu için DOM erişimini sınırlayın, Refs’i memo ve useCallback ile birleştirin ve current kontrolü ile asenkron işlemlerde uygulamanın stabilitesini sağlayın.

📊 Referans Tablosu

React Element/Concept Description Usage Example
useRef Fonksiyonel bileşenlerde kalıcı referans oluşturur const inputRef = useRef(null)
createRef Sınıf bileşenlerinde Refs oluşturur this.inputRef = React.createRef()
current Ref’in işaret ettiği DOM veya bileşen örneğine erişim sağlar inputRef.current.focus()
forwardRef Ref’i ebeveyn bileşenden çocuk bileşene geçirir const Child = React.forwardRef((props, ref) => <div ref={ref} />)
scrollIntoView DOM öğesini görünür alana kaydırır listRef.current.lastElementChild.scrollIntoView({ behavior: 'smooth' })

Refs, React’te doğrudan DOM erişimi, performans optimizasyonu ve karmaşık UI etkileşimleri için temel bir araçtır. Önemli noktalar: useRef ve createRef kullanımı, useEffect ile lifecycle senkronizasyonu, gereksiz render’lardan kaçınma. İleri adımlar: forwardRef ile tekrar kullanılabilir bileşenler oluşturma, Refs’i üçüncü taraf kütüphanelerle entegre etme, memo ve useCallback ile optimizasyon. React DevTools ve resmi dokümantasyon ile bilgi derinleştirilebilir ve DOM yönetimi projelerde etkili hale getirilebilir.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek