"use client" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { z } from "zod" import { useState } from "react" const schema = z.object({ email: z.string().email("请输入有效的邮箱地址"), }) type FormData = z.infer interface NewsletterFormProps { variant?: "light" | "dark" } export default function NewsletterForm({ variant = "dark" }: NewsletterFormProps) { const [status, setStatus] = useState<"idle" | "success" | "error">("idle") const isDark = variant === "dark" const { register, handleSubmit, formState: { errors, isSubmitting }, reset, } = useForm({ resolver: zodResolver(schema), }) const onSubmit = async (data: FormData) => { try { await new Promise((resolve) => setTimeout(resolve, 800)) console.log("Newsletter subscription:", data.email) setStatus("success") reset() } catch { setStatus("error") } } if (status === "success") { return (
已订阅 DAL Code 月度洞察。
) } return (
{errors.email && (
{errors.email.message}
)}
{status === "error" && (
订阅失败,请稍后重试。
)}
) }