import { useForm } from "@tanstack/react-form"; interface MyFormProps { onSubmit?: (values: { username?: string; age?: string; password?: string; }) => void; } export function MyForm({ onSubmit }: MyFormProps) { const form = useForm({ defaultValues: { username: "", age: "", password: "", }, onSubmit: async ({ value }) => { onSubmit?.(value); }, }); return (

Registration Form (TanStack Form)

{ e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }} > { if (!value) return "Full name is required"; if (!/^[a-zA-Za-z\s]+$/.test(value)) { return "Please enter letters only"; } return undefined; }, }} > {(field) => (
field.handleChange(e.target.value)} style={{ width: "100%", padding: "8px", boxSizing: "border-box", }} /> {field.state.meta.errors.length > 0 && ( {field.state.meta.errors.join(", ")} )}
)}
{ if (!value) return "Age is required"; if (isNaN(Number(value))) { return "Please enter numbers only"; } if (Number(value) < 18) { return "Age must be at least 18"; } return undefined; }, }} > {(field) => (
field.handleChange(e.target.value)} style={{ width: "100%", padding: "8px", boxSizing: "border-box", }} /> {field.state.meta.errors.length > 0 && ( {field.state.meta.errors.join(", ")} )}
)}
{ if (!value) return "Password is required"; if (value.length < 8) { return "Password must be at least 8 characters long"; } return undefined; }, }} > {(field) => (
field.handleChange(e.target.value)} style={{ width: "100%", padding: "8px", boxSizing: "border-box", }} /> {field.state.meta.errors.length > 0 && ( {field.state.meta.errors.join(", ")} )}
)}
[state.canSubmit, state.isSubmitting]} > {([canSubmit, isSubmitting]) => ( )}
); }