0Pricing
React Academy · Ders

useMutation ile Değişiklikler

useMutation ile API'lere veri gönderin, yükleme ve hata durumlarını yönetin, başarı durumunda sorguları geçersiz kılın.

useMutation ile Değişiklikler, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 3. 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 API'lere veri göndermek, yükleme ve hata durumlarını ele almak ve başarılı değişikliklerden sonra eski sorguları geçersiz kılmak için useMutation kullanacaksınız.

useMutation Temelleri

useMutation'ı bir mutationFn ile çağırın. Bu çağrı bir mutate işlevi ve durum özellikleri döndürür. İşlemi başlatmak için mutate() işlevini çağırın.
import { useMutation } from '@tanstack/react-query';

const { mutate, isLoading, isError } = useMutation({
  mutationFn: (newPost) => fetch('/api/posts', {
    method: 'POST',
    body: JSON.stringify(newPost),
  }).then(r => r.json()),
});

mutate Çağrısı

Bir olay işleyicisinden `mutate(variables)` çağrısını yapın. variables, ilk bağımsız değişken olarak mutationFn'e aktarılır.
<button onClick={() => mutate({ title: 'New Post' })}>
  Create Post
</button>

Geri Çağırmalar: onSuccess, onError, onSettled

useMutation'a geri çağırma seçenekleri ekleyin: onSuccess başarılı bir değişiklikten sonra, onError başarısızlık durumunda, onSettled ise her iki durumda da (finally gibi) çalışır.
useMutation({
  mutationFn: createPost,
  onSuccess: (data) => {
    console.log('Created:', data);
    navigate('/posts/' + data.id);
  },
  onError: (error) => {
    toast.error(error.message);
  },
})

Değişiklikten Sonra Sorguları Geçersiz Kılma

Başarılı bir değişiklikten sonra, React Query'nin güncel verileri yeniden alması için ilgili sorguları geçersiz kılın. onSuccess içinde queryClient.invalidateQueries kullanın.
import { useQueryClient } from '@tanstack/react-query';

const queryClient = useQueryClient();

const { mutate } = useMutation({
  mutationFn: createPost,
  onSuccess: () => {
    queryClient.invalidateQueries({ queryKey: ['posts'] });
  },
});

await Sözdizimi için mutateAsync

Değişikliği beklemek ve try/catch ile ele almak için `mutateAsync` yerine `mutate` kullanın.
const { mutateAsync } = useMutation({ mutationFn: createPost });

async function handleSubmit() {
  try {
    const post = await mutateAsync({ title: 'Draft' });
    navigate('/posts/' + post.id);
  } catch (err) {
    setError(err.message);
  }
}

Değişiklik Sırasında Gönderimi Devre Dışı Bırakma

Değişiklik sürerken gönderim düğmesini devre dışı bırakmak için `isPending` (veya `isLoading`) kullanın.
const { mutate, isPending } = useMutation({ mutationFn: saveItem });

<button onClick={() => mutate(item)} disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

onMutate ile İyimser Güncellemeler

Sunucu yanıt vermeden önce önbelleği iyimser olarak güncellemek için onMutate kullanın. onMutate tarafından döndürülen bağlamı kullanarak onError içinde geri alma işlemi yapın.
useMutation({
  mutationFn: likePost,
  onMutate: async (id) => {
    await queryClient.cancelQueries({ queryKey: ['posts'] });
    const prev = queryClient.getQueryData(['posts']);
    queryClient.setQueryData(['posts'], old => old.map(p =>
      p.id === id ? { ...p, likes: p.likes + 1 } : p));
    return { prev };
  },
  onError: (err, id, ctx) => queryClient.setQueryData(['posts'], ctx.prev),
  onSettled: () => queryClient.invalidateQueries({ queryKey: ['posts'] }),
})

Değişiklik Durumunu Sıfırlama

Değişiklik durumunu (veri, hata ve durum) temizlemek için useMutation'dan gelen `reset()` işlevini çağırın. Bu, başka bir sayfaya geçtikten veya formu temizledikten sonra kullanışlıdır.
const { mutate, isError, reset } = useMutation({ /* ... */ });

{isError && (
  <>
    <p>Error!</p>
    <button onClick={reset}>Try Again</button>
  </>
)}

Birden Çok Değişikliği Paralel Çalıştırma

mutate işlevini paralel olarak birden çok kez çağırın; her çağrı bağımsız olarak izlenir. Paralel değişiklikler için mutateAsync ile Promise.all kullanın.
await Promise.all([
  mutateAsync({ id: 1, title: 'First' }),
  mutateAsync({ id: 2, title: 'Second' }),
]);

Hızlı Kontrol

Başarılı bir değişiklikten sonra kullanıcı arayüzünün güncel verileri göstermesini sağlamanın önerilen yolu nedir?

Özet

useMutation; mutate, isPending ve yaşam döngüsü geri çağırmalarını sunar. İlgili sorguları geçersiz kılmak için onSuccess kullanın. await tabanlı akışlar için mutateAsync kullanın. Geri almalı iyimser güncellemeler için onMutate/onError kullanın.

Sıradaki

Sıradaki ders: **useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalandırma** — sayfalandırılmış verileri alacak ve daha fazla sayfayı kesintisiz şekilde yükleyeceksiniz.

Sıkça Sorulan Sorular

“useMutation ile Değişiklikler” dersi ücretsiz mi?

Evet — “useMutation ile Değişiklikler” 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.

“useMutation ile Değişiklikler” dersinde ne öğreneceğim?

useMutation ile API'lere veri gönderin, yükleme ve hata durumlarını yönetin, başarı durumunda sorguları geçersiz kılı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 3. dersidir.

“useMutation ile Değişiklikler” 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. React Query ve QueryClient Kurulumu
  2. Önbelleğe Alma, Eski Veri Süresi ve Arka Planda Yeniden Getirme
  3. useMutation ile Değişiklikler
  4. useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama
← React Academy Sayfasına Dön