Form Control
FormControl provides context such as isInvalid
, isDisabled
, and isRequired
to form elements.
It follows the WAI specifications for forms.
Import#
import {FormControl,FormLabel,FormErrorMessage,FormHelperText,} from "@chakra-ui/react"
Usage#
Sample usage for a radio or checkbox group#
Making a field required#
By passing the isRequired
props, the Input
field has aria-required
set to
true
, and the FormLabel
will show a red asterisk.
Select Example#
Number Input Example#
Usage with Form Libraries#
Form Libraries like Formik make it soooo easy to manage form state and validation. I 💖 Formik
Improvements from v1#
We've improved the accessibility of the
FormControl
component. Here are the changes:id
passed to the form control will be passed to the form input directly.FormLabel
will havehtmlFor
that points to theid
of the form input.FormErrorMessage
addsaria-describedby
andaria-invalid
pointing to the form input.FormHelperText
adds/extendsaria-describedby
pointing to the form input.isDisabled
,isRequired
,isReadOnly
props passed toFormControl
will cascade across all related components.
FormLabel
is now aware of thedisabled
,focused
anderror
state of the form input. This helps you style the label accordingly using the_disabled
,_focus
, and_invalid
style props.If you render
FormErrorMessage
andisInvalid
isfalse
orundefined
,FormErrorMessage
won't be visible. The only way to make it visible is by passingisInvalid
and setting it totrue
.
Props#
Name | Type | Description | Default |
---|---|---|---|
colorScheme | string | - | |
isDisabled | boolean | If `true`, the form control will be disabled. This has 2 side effects: - The `FormLabel` will have `data-disabled` attribute - The form element (e.g, Input) will be disabled | - |
isInvalid | boolean | If `true`, the form control will be invalid. This has 2 side effects: - The `FormLabel` and `FormErrorIcon` will have `data-invalid` set to `true` - The form element (e.g, Input) will have `aria-invalid` set to `true` | - |
isReadOnly | boolean | If `true`, the form control will be readonly | - |
isRequired | boolean | If `true`, the form control will be required. This has 2 side effects: - The `FormLabel` will show a required indicator - The form element (e.g, Input) will have `aria-required` set to `true` | - |
label | string | The label text used to inform users as to what information is requested for a text field. | - |
size | string | - | |
variant | string | - |