React Server Actions, form gönderimlerini ve veri mutasyonlarını doğrudan sunucuda işlemek için güçlü bir özelliktir. React geliştirmeyi basitleştirir ve güvenliği artırır.
React Server Actions: Sunucu Taraflı Form İşleme Basitleştirildi
React 18'de tanıtılan ve Next.js'de önemli ölçüde geliştirilen React Server Actions, form gönderimlerini ve veri mutasyonlarını doğrudan sunucuda işlemek için devrim niteliğinde bir yaklaşım sunar. Bu güçlü özellik, geliştirme sürecini basitleştirir, güvenliği artırır ve geleneksel istemci tarafı veri alma ve işleme yöntemlerine kıyasla performansı iyileştirir.
React Server Actions Nedir?
Server Actions, sunucuda çalışan ve doğrudan React bileşenlerinden çağrılabilen zaman uyumsuz fonksiyonlardır. Şunlar gibi sunucu tarafı görevleri gerçekleştirmenize olanak tanır:
- Form Gönderimleri: Form verilerini sunucuda güvenli bir şekilde işleyin.
- Veri Mutasyonları: Veritabanlarını veya harici API'leri güncelleyin.
- Kimlik Doğrulama: Kullanıcı girişlerini ve kayıtlarını işleyin.
- Sunucu Taraflı Mantık: Karmaşık iş mantığını istemciye maruz bırakmadan çalıştırın.
Server Actions'ın temel avantajı, istemci tarafı ayrı API rotalarına ve karmaşık veri alma mantığına olan ihtiyacı ortadan kaldırarak sunucu tarafı kodu React bileşenleriniz içinde yazmanıza olanak tanımasıdır. UI ve sunucu tarafı mantığının bu şekilde bir arada bulunması, daha sürdürülebilir ve verimli bir kod tabanıyla sonuçlanır.
React Server Actions Kullanmanın Faydaları
React Server Actions kullanmak, birkaç önemli fayda sağlar:
Basitleştirilmiş Geliştirme
Server Actions, form gönderimlerini ve veri mutasyonlarını doğrudan React bileşenlerinizde işlemenize izin vererek tekrarlayan kodları azaltır. Bu, ayrı API uç noktalarına ve karmaşık istemci tarafı veri alma mantığına olan ihtiyacı ortadan kaldırır, geliştirme sürecini kolaylaştırır ve kodunuzu anlamayı ve sürdürmeyi kolaylaştırır. Basit bir iletişim formunu düşünün. Server Actions olmadan, form gönderimini işlemek için ayrı bir API rotası, veriyi göndermek için istemci tarafı JavaScript ve hem istemci hem de sunucuda hata işleme mantığına ihtiyacınız olacaktır. Server Actions ile bunların tümü bileşen içinde halledilebilir.
Gelişmiş Güvenlik
Kodu sunucuda çalıştırarak, Server Actions uygulamanızın saldırı yüzeyini azaltır. Hassas veriler ve iş mantığı istemciden uzakta tutularak kötü niyetli kullanıcıların bunlara müdahale etmesi engellenir. Örneğin, veritabanı kimlik bilgileri veya API anahtarları asla istemci tarafı kodda maruz bırakılmaz. Tüm veritabanı etkileşimleri sunucuda gerçekleşir, SQL enjeksiyonu veya yetkisiz veri erişimi riskini azaltır.
Geliştirilmiş Performans
Server Actions, istemcide indirilmesi ve çalıştırılması gereken JavaScript miktarını azaltarak performansı artırabilir. Bu, özellikle düşük güçlü cihazlara veya yavaş internet bağlantılarına sahip kullanıcılar için faydalıdır. Veri işleme sunucuda gerçekleşir ve yalnızca gerekli UI güncellemeleri istemciye gönderilir, bu da daha hızlı sayfa yüklemeleri ve daha sorunsuz bir kullanıcı deneyimi sağlar.
İyimser Güncellemeler
Server Actions, iyimser güncellemeleri etkinleştirmek için React'in Suspense ve Transitions'ı ile sorunsuz bir şekilde entegre olur. İyimser güncellemeler, sunucu eylemi onaylamadan önce bile kullanıcı arayüzünü hemen güncellemenize olanak tanır. Bu, kullanıcıların eylemlerinin sonuçlarını görmeden önce sunucunun yanıt vermesini beklemesi gerekmediği için daha duyarlı ve ilgi çekici bir kullanıcı deneyimi sağlar. E-ticarette, sunucu arka planda eklemeyi onaylarken bir öğeyi alışveriş sepetine eklemek hemen görüntülenebilir.
Aşamalı Geliştirme
Server Actions, JavaScript devre dışı bırakılsa veya yüklenemese bile uygulamanızın çalışmaya devam edebileceği anlamına gelen aşamalı geliştirmeyi destekler. JavaScript devre dışı bırakıldığında, formlar geleneksel HTML formları olarak gönderilir ve sunucu gönderimi işler ve kullanıcıyı yeni bir sayfaya yönlendirir. Bu, uygulamanızın tarayıcı yapılandırması veya ağ koşulları ne olursa olsun tüm kullanıcılara erişilebilir kalmasını sağlar. Bu özellikle erişilebilirlik ve SEO için önemlidir.
React Server Actions Nasıl Kullanılır
React Server Actions'ı kullanmak için Next.js gibi bunları destekleyen bir çerçeve kullanmanız gerekir. İşte adım adım bir kılavuz:
1. Server Action Tanımlama
Sunucuda çalışacak zaman uyumsuz bir fonksiyon oluşturun. Bu fonksiyon, veritabanını güncelleme veya bir API çağırma gibi sunucuda yürütmek istediğiniz mantığı işlemelidir. Fonksiyonu, sunucu tarafı bir fonksiyon olduğunu belirtmek için en üstte 'use server' yönergesiyle işaretleyin. Bu yönerge, React derleyicisine fonksiyonu sunucu tarafı bir fonksiyon olarak değerlendirmesini ve istemci ile sunucu arasındaki verilerin serileştirilmesini ve serisizleştirilmesini otomatik olarak işlemesini söyler.
// app/actions.js
'use server'
import { revalidatePath } from 'next/cache';
import { saveMessage } from './db';
export async function createMessage(prevState, formData) {
const message = formData.get('message');
try {
await saveMessage(message);
revalidatePath('/'); // Rota önbelleğini temizle
return { message: 'Mesaj başarıyla kaydedildi!' };
} catch (e) {
return { message: 'Mesaj kaydedilemedi' };
}
}
Açıklama:
- 'use server' yönergesi bu fonksiyonu bir Server Action olarak işaretler.
- `revalidatePath('/')` rota önbelleğini temizler ve bir sonraki istekte güncellenmiş verilerin alınmasını sağlar. Bu, veri tutarlılığını korumak için kritiktir.
- `saveMessage(message)`, gerçek veritabanı etkileşimi mantığınız için bir yer tutucudur. Mesajı veritabanınıza kaydetmeyi işleyen başka bir yerde tanımlanmış bir `saveMessage` fonksiyonuna sahip olduğunuzu varsayar.
- Fonksiyon, kullanıcıya geri bildirim göstermek için kullanılabilecek bir durum nesnesi döndürür.
2. Bileşeninizde Server Action'ı İçe Aktarma ve Kullanma
Server Action'ı React bileşeninize aktarın ve bir form öğesindeki `action` özelliğine kullanın. `useFormState` kancası, formun durumunu yönetmek ve kullanıcıya geri bildirim göstermek için kullanılabilir.
// app/page.jsx
'use client';
import { useFormState } from 'react-dom';
import { createMessage } from './actions';
export default function Home() {
const [state, formAction] = useFormState(createMessage, {message: ''});
return (
);
}
Açıklama:
- 'use client' yönergesi bunun bir İstemci Bileşeni olduğunu belirtir (çünkü `useFormState` kullanıyor).
- `useFormState(createMessage, {message: ''})` form durumunu `createMessage` Server Action ile başlatır. İkinci argüman başlangıç durumudur.
- `form` öğesinin `action` özelliği, `useFormState` tarafından döndürülen `formAction`'a ayarlanır.
- `state` değişkeni, kullanıcıya geri bildirim göstermek için kullanılabilecek Server Action'ın dönüş değerini içerir.
3. Form Verilerini İşleme
Server Action içinde, `FormData` API'sini kullanarak form verilerine erişebilirsiniz. Bu API, form alanlarının değerlerine erişmek için kullanışlı bir yol sağlar.
'use server'
export async function createMessage(prevState, formData) {
const message = formData.get('message');
// ...
}
4. Hataları İşleme
Server Action'ın yürütülmesi sırasında oluşabilecek hataları işlemek için `try...catch` bloklarını kullanın. Kullanıcıya görüntülemek için durum nesnesine bir hata mesajı döndürün.
'use server'
export async function createMessage(prevState, formData) {
const message = formData.get('message');
try {
// ...
} catch (e) {
return { message: 'Mesaj kaydedilemedi' };
}
}
5. Verileri Yeniden Doğrulama
Bir Server Action başarıyla veri değiştirdikten sonra, UI'nin en son değişiklikleri yansıtmasını sağlamak için veri önbelleğini yeniden doğrulamanız gerekebilir. Belirli yolları veya etiketleri yeniden doğrulamak için `next/cache`'den `revalidatePath` veya `revalidateTag` fonksiyonlarını kullanın.
'use server'
import { revalidatePath } from 'next/cache';
export async function createMessage(prevState, formData) {
// ...
revalidatePath('/'); // Rota önbelleğini temizle
// ...
}
Gelişmiş Kullanım
Veri Mutasyonu
Server Actions, veritabanlarını veya harici API'leri güncelleme gibi veri mutasyonları için özellikle uygundur. Verileri doğrulama, hesaplamalar yapma veya birden çok veri kaynağıyla etkileşim kurma gibi sunucu tarafı mantığı gerektiren karmaşık veri mutasyonlarını işlemek için Server Actions'ı kullanabilirsiniz. Bir kullanıcının profilini güncellemeniz ve bir onay e-postası göndermeniz gereken bir senaryoyu düşünün. Bir Server Action, veritabanı güncellemesini ve e-posta gönderme işlemini tek bir atomik işlemde işleyebilir.
Kimlik Doğrulama ve Yetkilendirme
Server Actions, kimlik doğrulama ve yetkilendirme işlemlerini yapmak için kullanılabilir. Kimlik doğrulama ve yetkilendirme denetimlerini sunucuda gerçekleştirerek, yalnızca yetkili kullanıcıların hassas verilere ve işlevlere erişebilmesini sağlayabilirsiniz. Kullanıcı girişlerini, kayıtları ve parola sıfırlamalarını işlemek için Server Actions'ı kullanabilirsiniz. Örneğin, bir Server Action, kullanıcı kimlik bilgilerini bir veritabanına karşı doğrulayabilir ve sonraki istekleri kimlik doğrulamak için kullanılabilecek bir belirteç döndürebilir.
Edge Fonksiyonları
Server Actions, kullanıcılarınıza yakın küresel bir sunucu ağı üzerinde çalışan Edge Fonksiyonları olarak dağıtılabilir. Bu, özellikle coğrafi olarak dağınık konumlardaki kullanıcılar için gecikmeyi önemli ölçüde azaltabilir ve performansı artırabilir. Edge Fonksiyonları, düşük gecikme gerektiren Server Actions'ı işlemek için idealdir, örneğin gerçek zamanlı veri güncellemeleri veya kişiselleştirilmiş içerik sunumu gibi. Next.js, Server Actions'ı Edge Fonksiyonları olarak dağıtmak için yerleşik destek sağlar.
Akış (Streaming)
Server Actions akışı destekler; bu da veriler hazır hale geldikçe istemciye parçalar halinde göndermenize olanak tanır. Bu, özellikle uzun süren Server Actions için uygulamanızın algılanan performansını artırabilir. Akış, büyük veri kümelerini veya karmaşık hesaplamaları işlemek için özellikle yararlıdır. Örneğin, veritabanından alınırken arama sonuçlarını istemciye aktarabilirsiniz, bu da daha duyarlı bir kullanıcı deneyimi sağlar.
En İyi Uygulamalar
React Server Actions'ı kullanırken izlenecek bazı en iyi uygulamalar şunlardır:
- Server Actions'ları küçük ve odaklanmış tutun: Her Server Action, tek, iyi tanımlanmış bir görev gerçekleştirmelidir. Bu, kodunuzun anlaşılmasını, test edilmesini ve sürdürülmesini kolaylaştırır.
- Açıklayıcı adlar kullanın: Server Action'ın amacını açıkça belirten adlar seçin. Örneğin, `processData` gibi genel adlar yerine `createComment` veya `updateUserProfile` daha iyidir.
- Verileri sunucuda doğrulayın: Kötü niyetli kullanıcıların uygulamanıza geçersiz veri enjekte etmesini önlemek için her zaman verileri sunucuda doğrulayın. Bu, veri türlerini, biçimlerini ve aralıklarını doğrulamayı içerir.
- Hataları zarifçe işleyin: Hataları işlemek ve kullanıcıya bilgilendirici hata mesajları sağlamak için `try...catch` bloklarını kullanın. Hassas hata bilgilerini istemciye maruz bırakmaktan kaçının.
- İyimser güncellemeler kullanın: Sunucu eylemi onaylamadan önce bile kullanıcı arayüzünü hemen güncelleyerek daha duyarlı bir kullanıcı deneyimi sağlayın.
- Gerektiğinde verileri yeniden doğrulayın: Bir Server Action veri değiştirdikten sonra veri önbelleğini yeniden doğrulayarak UI'nin en son değişiklikleri yansıttığından emin olun.
Gerçek Dünya Örnekleri
React Server Actions'ın farklı uygulama türlerinde nasıl kullanılabileceğine dair bazı gerçek dünya örneklerini inceleyelim:
E-ticaret Uygulaması
- Alışveriş sepetine bir ürün ekleme: Bir Server Action, bir ürünü kullanıcının alışveriş sepetine eklemeyi ve sepet toplamını veritabanında güncellemeyi işleyebilir. İyimser güncellemeler, öğenin sepette hemen görüntülenmesi için kullanılabilir.
- Ödeme işleme: Bir Server Action, üçüncü taraf bir ödeme ağ geçidi kullanarak ödeme işlemeyi işleyebilir. Server Action ayrıca sipariş durumunu veritabanında güncelleyebilir ve kullanıcıya bir onay e-postası gönderebilir.
- Ürün incelemesi gönderme: Bir Server Action, bir ürün incelemesi göndermeyi ve veritabanına kaydetmeyi işleyebilir. Server Action ayrıca ürün için ortalama puanı hesaplayabilir ve ürün detayları sayfasını güncelleyebilir.
Sosyal Medya Uygulaması
- Yeni bir tweet yayınlama: Bir Server Action, yeni bir tweet yayınlamayı ve veritabanına kaydetmeyi işleyebilir. Server Action ayrıca kullanıcının zaman çizelgesini güncelleyebilir ve takipçilerini bilgilendirebilir.
- Bir gönderiyi beğenme: Bir Server Action, bir gönderiyi beğenmeyi ve beğeni sayısını veritabanında güncellemeyi işleyebilir. İyimser güncellemeler, güncellenmiş beğeni sayısının hemen görüntülenmesi için kullanılabilir.
- Bir kullanıcıyı takip etme: Bir Server Action, bir kullanıcıyı takip etmeyi ve veritabanındaki takipçi ve takip edilen sayılarını güncellemeyi işleyebilir.
İçerik Yönetim Sistemi (CMS)
- Yeni bir blog yazısı oluşturma: Bir Server Action, yeni bir blog yazısı oluşturmayı ve veritabanına kaydetmeyi işleyebilir. Server Action ayrıca yazı için bir URL parçası oluşturabilir ve site haritasını güncelleyebilir.
- Bir sayfayı güncelleme: Bir Server Action, bir sayfayı güncelleme ve veritabanına kaydetme işlemlerini yapabilir. Server Action ayrıca güncellenen içeriğin kullanıcılara gösterilmesini sağlamak için sayfa önbelleğini yeniden doğrulayabilir.
- Bir değişikliği yayınlama: Bir Server Action, bir değişikliği veritabanına yayınlamayı ve tüm aboneleri bildirmeyi işleyebilir.
Uluslararasılaştırma Konuları
Küresel bir kitleye yönelik uygulama geliştirirken, uluslararasılaştırmayı (i18n) ve yerelleştirmeyi (l10n) göz önünde bulundurmak önemlidir. Uluslararasılaştırılmış uygulamalarda React Server Actions kullanırken dikkate alınması gereken bazı noktalar şunlardır:
- Farklı tarih ve saat biçimlerini işleme: Tarihleri ve saatleri kullanıcının yerel ayarlarına göre biçimlendirmek için `Intl` API'sini kullanın.
- Farklı sayı biçimlerini işleme: Sayıları kullanıcının yerel ayarlarına göre biçimlendirmek için `Intl` API'sini kullanın.
- Farklı para birimi biçimlerini işleme: Para birimlerini kullanıcının yerel ayarlarına göre biçimlendirmek için `Intl` API'sini kullanın.
- Hata mesajlarını çevirme: Hata mesajlarını kullanıcının diline çevirin.
- Sağdan sola (RTL) dilleri destekleme: Uygulamanızın Arapça ve İbranice gibi RTL dillerini desteklediğinden emin olun.
Örneğin, bir tarih girdisi gerektiren bir formu işlerken, bir Server Action, kullanıcının yerel ayarlarına göre tarihi ayrıştırmak için `Intl.DateTimeFormat` API'sini kullanabilir ve tarihin kullanıcının bölgesel ayarlarından bağımsız olarak doğru şekilde yorumlanmasını sağlayabilir.
Sonuç
React Server Actions, React uygulamalarında sunucu tarafı form işlemenin ve veri mutasyonlarının basitleştirilmesi için güçlü bir araçtır. Sunucu tarafı kodu doğrudan React bileşenleriniz içinde yazmanıza izin vererek, Server Actions tekrarlayan kodları azaltır, güvenliği artırır, performansı iyileştirir ve iyimser güncellemeleri etkinleştirir. Bu kılavuzda belirtilen en iyi uygulamaları izleyerek, daha sağlam, ölçeklenebilir ve sürdürülebilir React uygulamaları oluşturmak için Server Actions'dan yararlanabilirsiniz. React gelişmeye devam ettikçe, Server Actions şüphesiz web geliştirmenin geleceğinde giderek daha önemli bir rol oynayacaktır.