---
# System prepended metadata

title: Forms
tags: [zeta-dom-react]

---

---
tags: zeta-dom-react
---

# Forms

The use of `FormContext` and `useFormField` hooks allows easy implementation of any kind of form controls with high customizability, with validations and field values access.

```typescript
import { Form, useFormContext } from "zeta-dom-react";

function Login() {
    const form = useFormContext();
    return (
        <Form context={form}>
            <TextField name="username" required label="Username" />
            <TextField name="password" required type="password" label="Password" />
            <Button label="Login" onClick={() => login(form.data)} />
        </Form>
    );
}
```

:::info
The library does not ship built-in field components. See [Building form controls](/2HfnDal5TAazIW673_seTA) for more information.
:::

## Examples

### To-do List

```typescript
function ToDoList() {
    const [items, setItems] = useState<string[]>([]);
    const form = useFormContext();
    return (
        <Form context={form}>
            <ul>
                {items.map((v, i) => (<li key={i}>{v}</li>))}
            </ul>
            {/* TextField is a component using `useFormField` hooks */}
            <TextField name="item" />
            {/* value of the field "item" can be accessed through `form.data` */}
            <button onClick={() => setItems([...items, form.data.item]) } />
        </Form>
    );
}
```