Loading...
Loading...
Build forms using @mantine/form in the mantine-9 repository. Use this skill when: (1) setting up a form with useForm, (2) adding validation rules or async validation, (3) working with nested object or array fields, (4) sharing form state across components with createFormContext, (5) using uncontrolled mode for performance, (6) using the standalone useField hook, or (7) any task involving useForm, getInputProps, onSubmit, insertListItem, or form validation.
npx skill4agent add mantinedev/skills mantine-formconst form = useForm({
mode: 'controlled', // or 'uncontrolled' for large forms
initialValues: {
email: '',
age: 0,
},
validate: {
email: isEmail('Invalid email'),
age: isInRange({ min: 18 }, 'Must be at least 18'),
},
});<TextInput {...form.getInputProps('email')} label="Email" />
<NumberInput {...form.getInputProps('age')} label="Age" />{ type: 'checkbox' }<Checkbox {...form.getInputProps('agreed', { type: 'checkbox' })} label="I agree" /><form onSubmit={form.onSubmit((values) => console.log(values))}>
...
<Button type="submit">Submit</Button>
</form>onSubmitform.onSubmit(
(values) => save(values),
(errors) => console.log('Validation failed', errors)
)validate: {
name: isNotEmpty('Required'),
email: isEmail('Invalid email'),
password: hasLength({ min: 8 }, 'Min 8 chars'),
confirmPassword: matchesField('password', 'Passwords do not match'),
}validate: (values) => ({
endDate: values.endDate < values.startDate ? 'End must be after start' : null,
})validateInputOnChange: true, // validate all fields on every change
validateInputOnChange: ['email'], // validate specific fields only
validateInputOnBlur: true, // validate on blur instead| Mode | State storage | Re-renders | Input props |
|---|---|---|---|
| React state | On every change | |
| Refs | None | |
form.key('fieldPath')keyreferences/api.mduseFormuseFieldcreateFormContextcreateFormActionsreferences/patterns.mdtransformValuesuseField