Doğrulama ile server action kullanan form gönderimi.
class=class="text-emerald-400">"text-emerald-400">'use server'
import { z } from class=class="text-emerald-400">"text-emerald-400">'zod'
const ContactSchema = z.object({
name: z.string().min(2, class=class="text-emerald-400">"text-emerald-400">'Name must be at least 2 characters'),
email: z.string().email(class=class="text-emerald-400">"text-emerald-400">'Invalid email address'),
message: z.string().min(10, class=class="text-emerald-400">"text-emerald-400">'Message must be at least 10 characters'),
})
export type FormState = {
success: boolean
errors?: Record<string, string[]>
message?: string
}
export async function submitContact(
_prevState: FormState,
formData: FormData
): Promise<FormState> {
const raw = {
name: formData.get(class=class="text-emerald-400">"text-emerald-400">'name') as string,
email: formData.get(class=class="text-emerald-400">"text-emerald-400">'email') as string,
message: formData.get(class=class="text-emerald-400">"text-emerald-400">'message') as string,
}
const result = ContactSchema.safeParse(raw)
if (!result.success) {
return { success: false, errors: result.error.flatten().fieldErrors }
}
class=class="text-emerald-400">"text-gray">// Save to database or send email
return { success: true, message: class=class="text-emerald-400">"text-emerald-400">'Message sent successfully!' }
}Action'ı içe aktarın ve useActionState ile kullanın: const [state, formAction] = useActionState(submitContact, { success: false }). formAction'ı formun action prop'u olarak verin. Doğrulama geri bildirimi için state.errors'u görüntüleyin.
Fikrinizi nasıl hayata geçirebileceğimizi konuşalım. İlk konseptten üretime hazır ürüne kadar — yanınızdayız.