top of page

React’te useEffect Hook’unun Etkin Kullanımı

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.

 
 
bottom of page