Form
A native form element with consolidated error handling and validation.1<Form2 onSubmit={(e) => {3 e.preventDefault();4 alert("Submitted!");5 }}6>7 <Field label="Email" required>8 <InputField type="email" placeholder="Enter email" />9 </Field>10 <Field label="Message" optional>11 <TextArea placeholder="Enter message" />12 </Field>13 <Button type="submit">Submit</Button>14</Form>
Anatomy
Import and assemble the component:
1import { Form, Field, InputField, Button } from "@raystack/apsara";23<Form onSubmit={handleSubmit}>4 <Field label="Email">5 <InputField placeholder="Enter email" />6 </Field>7 <Button type="submit">Submit</Button>8</Form>
API Reference
Prop
Type
Examples
Basic Form
A simple form with submit handling.
1<Form2 onSubmit={(e) => {3 e.preventDefault();4 alert("Submitted!");5 }}6>7 <Field label="Name" required>8 <InputField placeholder="Enter your name" />9 </Field>10 <Button type="submit">Submit</Button>11</Form>
With Fields
Form with multiple fields using the Field component.
1<Form2 onSubmit={(e) => {3 e.preventDefault();4 }}5>6 <Field label="First Name" required>7 <InputField placeholder="John" />8 </Field>9 <Field label="Last Name" required>10 <InputField placeholder="Doe" />11 </Field>12 <Field label="Email" required helperText="We'll send a confirmation email">13 <InputField type="email" placeholder="john@example.com" />14 </Field>15 <Field label="Bio" optional>
Server-Side Errors
Pass server validation errors to the errors prop. Errors clear automatically when the user modifies the corresponding field.
1(function ServerErrorExample() {2 const [errors, setErrors] = React.useState({});34 async function handleSubmit(e) {5 e.preventDefault();6 // Simulate server validation7 setErrors({ email: "This email is already taken" });8 }910 return (11 <Form onSubmit={handleSubmit} errors={errors}>12 <Field name="email" label="Email" required>13 <InputField type="email" placeholder="Enter email" />14 </Field>15 <Button type="submit">Submit</Button>
Validation Modes
Control when validation occurs: onSubmit (default), onBlur, or onChange.
1<Form validationMode="onSubmit">2 <Field name="email">3 <Field.Label>Email</Field.Label>4 <Field.Control type="email" required placeholder="Validated on submit" />5 <Field.Error match="valueMissing">Email is required</Field.Error>6 <Field.Error match="typeMismatch">Enter a valid email</Field.Error>7 </Field>8 <Button type="submit">Submit</Button>9</Form>
Accessibility
- Renders a native
<form>element - Works with native constraint validation attributes (
required,pattern,minLength, etc.) - Compatible with React Hook Form, TanStack Form, and other form libraries