React’te useEffect Hook’unun Etkin Kullanımı
- Tarık Tunç

- 22 Haz
- 2 dakikada okunur
Güncelleme tarihi: 9 Eyl
Modern web uygulamalarında yan etkilerin (side effects) yönetimi, kullanıcı deneyimi ve performans açısından kritik bir öneme sahiptir. React kütüphanesi, fonksiyonel bileşenlerde bu süreci kolaylaştırmak amacıyla Hooks mimarisini geliştirmiştir. Bu mimari içerisinde en çok kullanılan araçlardan biri useEffect Hook’udur. Bu çalışma, useEffect’in temel kullanımını, optimizasyon yöntemlerini, yaygın hataları ve gelişmiş senaryolarını akademik bir bakış açısıyla incelemeyi amaçlamaktadır.
1. useEffect Hook’unun Kavramsal Temelleri
React bileşenleri varsayılan olarak yalnızca saf render işlemleri gerçekleştirir. Ancak, API çağrıları, tarayıcı başlığı güncellemeleri veya zamanlayıcı tanımlamaları gibi işlemler yan etki kategorisine girer. useEffect Hook’u, bu yan etkilerin bileşen yaşam döngüsüne uygun bir şekilde yönetilmesine olanak tanır.
2. Temel Kullanım ve Dependency Array
useEffect, iki parametre kabul eder: bir callback fonksiyonu ve isteğe bağlı dependency array.
Örnek 1: Basit Kullanım
useEffect(() => {
document.title = "Yeni başlık";
});
Bu örnekte, bileşen her render olduğunda document.title güncellenir.
Örnek 2: Dependency Array ile Kontrol
const [count, setCount] = useState(0);
useEffect(() => {
alert(`Count: ${count}`);
}, [count]);
Dependency array, effect’in yalnızca belirtilen değişkenlerdeki güncellemelerde tetiklenmesini sağlar.
3. Temizlik (Cleanup) İşlemleri
Yan etkiler, genellikle belirli koşullarda temizlenmesi gereken kaynaklar üretir. Temizlik işlemleri, bellek sızıntılarının önlenmesi açısından kritiktir.
useEffect(() => {
const timer = setTimeout(() => {
alert("Timer tamamlandı!");
}, 3000);
return () => clearTimeout(timer);
}, []);
Bu örnekte, bileşen yok edildiğinde aktif zamanlayıcı iptal edilmektedir.
4. Performans Optimizasyonu
Yan etkilerin kontrolsüz çalıştırılması, performans sorunlarına yol açabilir. Özellikle API çağrılarında dependency array doğru kullanılmalıdır.
const [searchTerm, setSearchTerm] = useState('');
useEffect(() => {
const fetchData = async () => {
const response = await fetch(
`https://api.example.com/search?q=${searchTerm}`
);
// Veri işlenir
};
if (searchTerm !== '') {
fetchData();
}
}, [searchTerm]);
Bu örnekte, API yalnızca searchTerm değiştiğinde çağrılmaktadır.
5. Yaygın Hatalar
Yanlış dependency yönetimi, sonsuz döngü gibi sorunlara yol açabilir.
useEffect(() => {
setCount(count + 1); // Sonsuz döngü
}, [count]);
Bu durumda, doğru yöntem şu şekilde olmalıdır:
setCount(prev => prev + 1);
6. Gelişmiş Kullanım Senaryoları
6.1. Event Listener Yönetimi
useEffect(() => {
const handleResize = () => {
console.log("Pencere boyutu değişti");
};
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
Event listener’ların temizlenmesi, özellikle büyük ölçekli uygulamalarda performans optimizasyonu sağlar.
6.2. Çoklu useEffect Kullanımı
Bileşenlerde farklı amaçlarla birden fazla useEffect kullanılabilir. Bu, kodun modüler ve okunabilir olmasına katkı sağlar.
Bu çalışmada, useEffect Hook’unun teorik temelleri, temel kullanımı, optimizasyon teknikleri ve gelişmiş senaryoları sistematik bir şekilde ele alınmıştır. Doğru uygulandığında, useEffect yalnızca yan etkileri kontrol etmekle kalmaz, aynı zamanda uygulamanın performansını, sürdürülebilirliğini ve kullanıcı deneyimini de önemli ölçüde iyileştirir.



