Forma bir əməliyyatdır
onSubmit həm düymə, həm klaviatura göndərişini tutur. preventDefault səhifənin ilkin yenilənməsini dayandırır. Aşağıdakı komponent onSave adlı Promise qaytaran funksiya qəbul edir; onu real tətbiqin göndəriş məntiqi ilə birləşdir.
import { useState } from 'react';
export default function Signup({ onSave }) {
const [email, setEmail] = useState('');
const [status, setStatus] = useState('');
async function submit(event) {
event.preventDefault();
if (status === 'saving' || !email.trim()) return;
setStatus('saving');
try {
await onSave({ email: email.trim() });
setStatus('saved');
} catch { setStatus('error'); }
}
return <form onSubmit={submit}>
<label htmlFor="email">E-poçt</label>
<input id="email" type="email" required value={email}
onChange={event => setEmail(event.target.value)} />
<button type="submit" disabled={status === 'saving'}>Göndər</button>
<p role="status">{status === 'saved' ? 'Göndərildi' :
status === 'error' ? 'Alınmadı, yenidən sına' : status === 'saving' ? 'Göndərilir…' : ''}</p>
</form>;
}
Validasiya və geri əlaqə
Native required və email yoxlaması ilə başla, biznes qaydalarını əlavə et. Xətanı hansı sahəyə aid olduğu ilə göstər; lazım olduqda aria-describedby və aria-invalid istifadə et. Server yenə ayrıca yoxlamalıdır.
Xətada istifadəçinin yazısını itirmə. Uğur mesajını yalnız əməliyyatın nəticəsinə əsasən göstər. Tətbiqin daxili səhifəsinə keçid etmək lazım olduqda router imkanlarından istifadə et; sadəcə formaya basıldığı üçün süni uğur göstərmə.