Middle
Tek Sayfa Uygulamaları (SPA) içinde formlarla nasıl çalışıyorsunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
SPA'da formlarla çalışırken, kontrollü veya kontrolsüz bileşenler kullanıyorum.
Kontrollü bileşenler: Form alanının değeri bileşenin durumunda saklanır ve setState ile güncellenir.
// React'te kontrollü bir bileşen örneği
import React, { useState } from 'react';
function MyForm() {
const [name, setName] = useState('');
const handleChange = (event) => {
setName(event.target.value);
};
const handleSubmit = (event) => {
event.preventDefault();
console.log('Gönderildi:', name);
};
return (
<form onSubmit={handleSubmit}>
<label>
İsim:
<input type="text" value={name} onChange={handleChange} />
</label>
<button type="submit">Gönder</button>
</form>
);
}
Kontrollü bileşenlerin avantajları:
- Girişin kontrolü ve doğrulaması daha kolaydır.
- Koşullu alan gösterim mantığını daha kolay uygular.
- Redux, Vuex gibi durum yönetim kütüphaneleriyle entegrasyon kolaydır.
Kontrolsüz bileşenler: Form alanının değeri doğrudan DOM elementinde saklanır ve ref aracılığıyla erişilir.
// React'te kontrolsüz bileşen örneği
import React, { useRef } from 'react';
function MyUncontrolledForm() {
const inputRef = useRef(null);
const handleSubmit = (event) => {
event.preventDefault();
console.log('Gönderildi:', inputRef.current.value);
};
return (
<form onSubmit={handleSubmit}>
<label>
İsim:
<input type="text" ref={inputRef} />
</label>
<button type="submit">Gönder</button>
</form>
);
}
Kontrolsüz bileşenlerin avantajları:
- Basit formlar için daha uygundur.
- Daha az kodla temel uygulama yapılabilir.
SPA'da formlarla çalışma yaklaşımları:
- Doğrulama:
- Müşteri tarafında (JavaScript) anında geri bildirim için.
- Sunucu tarafında veri bütünlüğünü sağlamak için.
- Yup, Zod, VeeValidate, Vuelidate gibi kütüphaneler kullanılır.
- Gönderme işlemi:
- Varsayılan davranışı engellemek (
event.preventDefault()). - Veriyi sunucuya göndermek (Fetch API, Axios, XHR).
- Gönderim durumu göstermek (yükleniyor, başarı, hata).
- Varsayılan davranışı engellemek (
- Durum yönetimi:
- Bileşenin yerel durumu kullanılır.
- Daha karmaşık formlar veya uygulamanın diğer bölümlerinde kullanılan formlar için Redux, Vuex, Pinia gibi durum yöneticileri kullanılır.
- Kullanıcı geri bildirimi:
- Yükleniyor göstergeleri.
- Doğrulama hatası mesajları.
- Gönderim başarı/hata mesajları.
- Erişilebilirlik (A11y):
- Semantik HTML öğeleri kullanılır (
<form>,<label>,<input>,<button>). <label>ile giriş alanları uygun şekilde ilişkilendirilir (forattribute veya iç içe yerleştirme).- Gerekirse WAI-ARIA öznitelikleri kullanılır.
- Semantik HTML öğeleri kullanılır (
- Performans:
- Sık değişen alanlar için
onChangeolaylarının debounce veya throttle edilmesi. - Form durumundaki değişikliklere göre render optimizasyonu.
- Sık değişen alanlar için
- Testler:
- Form mantığı ve doğrulama için birim testleri.
- API ile etkileşimleri test eden entegrasyon testleri.
Kontrollü ve kontrolsüz bileşenler arasındaki seçim, formun karmaşıklığına ve durum yönetimi ile doğrulama gereksinimlerine bağlıdır. Çoğu form, özellikle karmaşık olanlar, kontrollü bileşenler daha fazla esneklik ve kontrol sağlar.