0Pricing
React Academy · Ders

Yarış Koşulları ve Effect Temizleme

Yeniden oluşturma sırasında güncelliğini yitirmiş fetch isteklerini iptal etmek için useEffect içinde AbortController kullanın.

Yarış Koşulları ve Effect Temizleme, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 1. 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, veri alan React efektlerinde yarış koşullarının nasıl oluştuğunu ve temizleme için AbortController kullanarak bunları nasıl ortadan kaldıracağınızı öğreneceksiniz.

Yarış Koşulu Nedir?

Yarış koşulu, iki eşzamansız işlemin öngörülemeyen bir sırayla tamamlanması durumunda ortaya çıkar. React'te bir kullanıcı öğeler arasında hızla gezinirse A öğesi için yapılan yavaş veri alma işlemi, B öğesinin veri alma işleminden sonra sonuçlanabilir ve güncelliğini yitirmiş verileri gösterebilir.

Hata: Güncelliğini Yitirmiş Veri Alma Yanıtı

Temizleme yapılmadığında, eski veri alma işlemi tamamlanmadan önce bileşen yeni bir ID ile yeniden oluşturulursa her iki veri alma işlemi de çalışır. Daha eski ve yavaş olan veri alma işlemi, durumdaki daha yeni verilerin üzerine yazabilir.
useEffect(() => {
  fetch('/api/item/' + id)
    .then(r => r.json())
    .then(data => setData(data)); // may run AFTER a newer fetch!
}, [id]);

Çözüm 1: Yok Sayma Bayrağı

Basit bir çözüm: efekt içinde bir boolean `ignore` bayrağı ayarlayın. Temizleme işlevi bu bayrağı true olarak ayarlar. Veri alma geri çağrısı, setState çağırmadan önce bayrağı kontrol eder.
useEffect(() => {
  let ignore = false;
  fetch('/api/item/' + id)
    .then(r => r.json())
    .then(data => { if (!ignore) setData(data); });
  return () => { ignore = true; };
}, [id]);

Çözüm 2: AbortController

AbortController modern standarttır. Efekt içinde bir controller oluşturun, sinyalini fetch'e aktarın ve temizleme işlevinde işlemi durdurun. Veri alma işlemi, yok sayabileceğiniz bir AbortError fırlatır.
useEffect(() => {
  const controller = new AbortController();
  fetch('/api/item/' + id, { signal: controller.signal })
    .then(r => r.json())
    .then(data => setData(data))
    .catch(err => {
      if (err.name === 'AbortError') return; // expected
      setError(err.message);
    });
  return () => controller.abort();
}, [id]);

async/await ile AbortController

useEffect içinde eşzamansız işlevlerle try/catch kullanın. catch bloğunda AbortError'ı yok sayın.
useEffect(() => {
  const ctrl = new AbortController();
  async function load() {
    try {
      const res = await fetch('/api/' + id, { signal: ctrl.signal });
      const json = await res.json();
      setData(json);
    } catch (e) {
      if (e.name !== 'AbortError') setError(e.message);
    }
  }
  load();
  return () => ctrl.abort();
}, [id]);

Temizleme Her Zaman Gereklidir

Yarış koşulları olası görünmese bile (örneğin bileşen bağlandığında yalnızca bir kez yapılan veri alma işleminde) her zaman temizleme ekleyin. React 18 StrictMode'da efektler iki kez çalışır; temizleme yapılmazsa ilk, terk edilmiş istek durumu kirletir.

useEffect İçindeki Eşzamansızlık Tuzakları

useEffect geri çağrısı `async` olamaz. Efektin içinde eşzamansız bir işlev tanımlayıp hemen çağırın veya `.then()/.catch()` kullanan normal bir işlev kullanın.
useEffect(() => {
  // useEffect callback is NOT async
  async function fetchData() { /* ... */ }
  fetchData(); // call it
  return () => ctrl.abort();
}, [id]);

Kitaplıklar Bunu Sizin İçin Yönetir

React Query, SWR ve RTK Query yarış koşullarını, durdurmayı ve temizlemeyi otomatik olarak yönetir. Bu kitaplıkları kullanırken AbortController kodunu elle yazmanız gerekmez.

Yarış Koşullarını Test Etme

Yarış koşullarını elle test etmek için Ağ DevTools'unu açın, hızı 'Yavaş 3G' olarak sınırlayın ve öğeler arasında hızla tıklayın. Temizleme yapılmadığında güncelliğini yitirmiş verilerin kısa süreliğine göründüğünü fark edersiniz. AbortController kullanıldığında yalnızca son seçilen öğe gösterilir.

Kısa Kontrol

Bir useEffect temizleme işlevinde controller.abort() çağırmak ne yapar?

Özet

Yarış koşulları, güncelliğini yitirmiş bir veri alma yanıtı daha yeni bir veri alma işleminden sonra durumu güncellediğinde oluşur. Bir yok sayma bayrağı veya AbortController ile çözün. useEffect temizlemesinde her zaman işlemi durdurun veya yanıtı yok sayın. React Query gibi kitaplıklar bunu otomatik olarak yönetir.

Sırada

Sıradaki ders: **Engelleme Yapmayan Arayüz Güncellemeleri için useTransition** — arayüzü duyarlı tutmak için pahalı durum güncellemelerini startTransition içine alacaksınız.

Sıkça Sorulan Sorular

“Yarış Koşulları ve Effect Temizleme” dersi ücretsiz mi?

Evet — “Yarış Koşulları ve Effect Temizleme” 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.

“Yarış Koşulları ve Effect Temizleme” dersinde ne öğreneceğim?

Yeniden oluşturma sırasında güncelliğini yitirmiş fetch isteklerini iptal etmek için useEffect içinde AbortController 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 1. dersidir.

“Yarış Koşulları ve Effect Temizleme” 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. Yarış Koşulları ve Effect Temizleme
  2. Engellemeyen Arayüz Güncellemeleri için useTransition
  3. Girdi Sıklığını Azaltmak için useDeferredValue
  4. Veri ve Kod Sınırları için Suspense
← React Academy Sayfasına Dön