Veri Değişiklikleri için Sunucu Eylemleri
Form değişikliklerini yönetmek ve önbelleği revalidatePath ile geçersiz kılmak için 'use server' işlevleri tanımlayın.
Veri Değişiklikleri için Sunucu Eylemleri, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 4. 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.
Sunucu Eylemleri Nedir
Sunucu Eylemleri, 'use server' ile işaretlenen ve yalnızca sunucuda çalışan eşzamansız işlevlerdir. API rota işleyicileri yazmadan form gönderimlerini ve veri değişikliklerini gerçekleştirmenizi sağlar.
Sunucu Eylemi Tanımlama
Bir Sunucu Eylemi oluşturmak için işlevin (veya dosyanın) en üstüne 'use server' ekleyin. Bu eylem yalnızca Sunucu Bileşenlerinde veya özel actions.ts dosyalarında tanımlanabilir.
// app/actions.ts
'use server';
import { revalidatePath } from 'next/cache';
import { redirect } from 'next/navigation';
export async function createPost(formData: FormData) {
const title = formData.get('title') as string;
await db.post.create({ data: { title } });
revalidatePath('/blog');
redirect('/blog');
}Formlarda Eylemleri Kullanma
Eylem işlevini bir formun action özelliğine aktarın. onSubmit yok, olay işleyicisi yok; Next.js formu serileştirir ve eylemi sunucu tarafında çağırır.
import { createPost } from './actions';
export default function NewPostForm() {
return (
<form action={createPost}>
<input name="title" placeholder="Post title" required />
<button type="submit">Create</button>
</form>
);
}useActionState Kancası
useActionState (React 19), bekleme durumunu izlemek ve eylemin dönüş değerini bileşende almak için bir eylemi sarar.
'use client';
import { useActionState } from 'react';
import { createPost } from './actions';
const initialState = { error: null };
export function PostForm() {
const [state, action, isPending] = useActionState(createPost, initialState);
return (
<form action={action}>
{state.error && <p className="error">{state.error}</p>}
<input name="title" />
<button disabled={isPending}>{isPending ? 'Creating...' : 'Create'}</button>
</form>
);
}Doğrulama Hatalarını Döndürme
Doğrulama hatalarını useActionState aracılığıyla forma geri iletmek için hata fırlatmak yerine eylemden bir nesne döndürün.
export async function createPost(prevState: any, formData: FormData) {
'use server';
const title = formData.get('title') as string;
if (!title || title.length < 3) {
return { error: 'Title must be at least 3 characters' };
}
await db.post.create({ data: { title } });
revalidatePath('/blog');
redirect('/blog');
}Olay İşleyicilerinde Sunucu Eylemleri
Sunucu Eylemlerini yalnızca form eylemlerinden değil, İstemci Bileşeni olay işleyicilerinden de doğrudan içe aktararak çağırabilirsiniz.
'use client';
import { deletePost } from './actions';
export function DeleteButton({ id }: { id: string }) {
return (
<button onClick={() => deletePost(id)}>
Delete
</button>
);
}Satır İçi Sunucu Eylemleri
Bir Sunucu Bileşeninde, içinde 'use server' bulunan bir işlev kullanarak Sunucu Eylemlerini satır içinde tanımlayın. Bu, değişiklik mantığını ilgili yerde tutmak için kullanışlıdır.
export default function PostPage({ post }) {
async function updatePost(formData: FormData) {
'use server';
await db.post.update({ where: { id: post.id }, data: { title: formData.get('title') as string } });
revalidatePath(`/blog/${post.id}`);
}
return (
<form action={updatePost}>
<input name="title" defaultValue={post.title} />
<button type="submit">Save</button>
</form>
);
}Sunucu Eylemleriyle useOptimistic
Eylem arka planda çalışırken kullanıcı arayüzünü anında güncellemek için useOptimistic ile Sunucu Eylemlerini birlikte kullanın.
'use client';
import { useOptimistic } from 'react';
import { addItem } from './actions';
export function TodoList({ items }) {
const [optimisticItems, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]);
return (
<form action={async (formData) => {
addOptimistic({ id: 'temp', text: formData.get('text') });
await addItem(formData);
}}>
<ul>{optimisticItems.map(i => <li key={i.id}>{i.text}</li>)}</ul>
<input name="text" /><button>Add</button>
</form>
);
}Güvenlik Konuları
Sunucu Eylemleri, arka planda POST uç noktalarıdır. Girdileri sunucu tarafında her zaman doğrulayıp temizleyin, kimlik doğrulamayı kontrol edin ve CSRF koruması kullanın (Next.js bunu aynı kaynak için otomatik olarak yapar).
Değişikliklerden Sonra Yeniden Doğrulama
İlgili önbellekleri temizlemek ve sonraki sayfa yüklemesinin değişikliği yansıtmasını sağlamak için bir değişiklikten sonra revalidatePath() veya revalidateTag() çağırın.
Hızlı Kontrol
Next.js Uygulama Yönlendiricisi'nde bir Sunucu Eylemini forma nasıl aktarırsınız?
Özet
Sunucu Eylemleri, değişiklikleri sunucu tarafında işleyen 'use server' eşzamansız işlevleridir. Bunları action özelliğiyle formlara bağlayın, durumu useActionState ile izleyin, doğrulama için hata fırlatmak yerine hata döndürün ve değişikliklerden sonra önbellekleri yeniden doğrulayın.
Sıkça Sorulan Sorular
“Veri Değişiklikleri için Sunucu Eylemleri” dersi ücretsiz mi?
Evet — “Veri Değişiklikleri için Sunucu Eylemleri” 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.
“Veri Değişiklikleri için Sunucu Eylemleri” dersinde ne öğreneceğim?
Form değişikliklerini yönetmek ve önbelleği revalidatePath ile geçersiz kılmak için 'use server' işlevleri tanımlayı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 4. dersidir.
“Veri Değişiklikleri için Sunucu Eylemleri” 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
- Next.js'te Önbellek Seçenekleriyle fetch()
- unstable_cache ve React cache()
- Artımlı Statik Yeniden Oluşturma (ISR)
- Veri Değişiklikleri için Sunucu Eylemleri