Field
A component that provides labelling and validation for form controls.
View as MarkdownVisible on your profile
Anatomy
Import the component and assemble its parts:
import { Field } from '@base-ui-components/react/field';
<Field.Root>
<Field.Label />
<Field.Control />
<Field.Description />
<Field.Error />
<Field.Validity />
</Field.Root>API reference
Root
Groups all parts of the field.
Renders a <div> element.
namestring
- Name
- Description
Identifies the field when a form is submitted. Takes precedence over the
nameprop on the<Field.Control>component.- Type
string | undefined
disabledboolean(default: false)
- Name
- Description
Whether the component should ignore user interaction. Takes precedence over the
disabledprop on the<Field.Control>component.- Type
boolean | undefined- Default
false
invalidboolean
- Name
- Description
Whether the field is forcefully marked as invalid.
- Type
boolean | undefined
validateUnion
- Name
- Description
A function for custom validation. Return a string or an array of strings with the error message(s) if the value is invalid, or
nullif the value is valid.- Type
| (( value: unknown, formValues: Record<string, unknown>, ) => | string | string[] | Promise<string | string[] | null> | null) | undefined
validationMode'onBlur' | 'onChange'(default: 'onBlur')
- Name
- Description
Determines when the field should be validated.
- onBlur triggers validation when the control loses focus
- onChange triggers validation on every change to the control value
- Type
'onBlur' | 'onChange' | undefined- Default
'onBlur'
validationDebounceTimenumber(default: 0)
- Description
How long to wait between
validatecallbacks ifvalidationMode="onChange"is used. Specified in milliseconds.- Type
number | undefined- Default
0
classNamestring | function
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Field.Root.State) => string)
renderReactElement | function
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Field.Root.State, ) => ReactElement)
data-disabled
data-valid
data-invalid
data-dirty
data-touched
data-filled
data-focused
Label
An accessible label that is automatically associated with the field control.
Renders a <label> element.
classNamestring | function
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Field.Root.State) => string)
renderReactElement | function
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Field.Root.State, ) => ReactElement)
data-disabled
data-valid
data-invalid
data-dirty
data-touched
data-filled
data-focused
Control
The form control to label and validate.
Renders an <input> element.
You can omit this part and use any Base UI input component instead. For example, Input, Checkbox, or Select, among others, will work with Field out of the box.
defaultValueUnion
- Name
- Type
string | number | string[] | undefined
onValueChangefunction
- Name
- Description
Callback fired when the
valuechanges. Use when controlled.- Type
| (( value: string, eventDetails: Field.Control.ChangeEventDetails, ) => void) | undefined
classNamestring | function
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Field.Root.State) => string)
renderReactElement | function
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Field.Root.State, ) => ReactElement)
data-disabled
data-valid
data-invalid
data-dirty
data-touched
data-filled
data-focused
Description
A paragraph with additional information about the field.
Renders a <p> element.
classNamestring | function
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Field.Root.State) => string)
renderReactElement | function
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Field.Root.State, ) => ReactElement)
data-disabled
data-valid
data-invalid
data-dirty
data-touched
data-filled
data-focused
Error
An error message displayed if the field control fails validation.
Renders a <div> element.
matchUnion
- Name
- Description
Determines whether to show the error message according to the field’s ValidityState. Specifying
truewill always show the error message, and lets external libraries control the visibility.- Type
| boolean | 'valid' | 'badInput' | 'customError' | 'patternMismatch' | 'rangeOverflow' | 'rangeUnderflow' | 'stepMismatch' | 'tooLong' | 'tooShort' | 'typeMismatch' | 'valueMissing' | undefined
classNamestring | function
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
string | ((state: Field.Root.State) => string)
renderReactElement | function
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Field.Root.State, ) => ReactElement)
data-disabled
data-valid
data-invalid
data-dirty
data-touched
data-filled
data-focused
Validity
Used to display a custom message based on the field’s validity.
Requires children to be a function that accepts field validity state as an argument.
children*((state: FieldValidityState) => ReactNode)
- Name
- Description
A function that accepts the field validity state as an argument.
<Field.Validity> {(validity) => { return <div>...</div> }} </Field.Validity>- Type
(state: FieldValidityState) => ReactNode