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.Item />
<Field.Error />
<Field.Validity />
</Field.Root>API reference
Root
Groups all parts of the field.
Renders a <div> element.
namestring
—
namestring
—- Name
- Description
Identifies the field when a form is submitted. Takes precedence over the
nameprop on the<Field.Control>component.- Type
string | undefined
dirtyboolean
—
dirtyboolean
—- Name
- Description
Whether the field's value has been changed from its initial value. Useful when the field state is controlled by an external library.
- Type
boolean | undefined
styleReact.CSSProperties | function
—
styleReact.CSSProperties | function
—- Name
- Type
| React.CSSProperties | ((state: Field.Root.State) => CSSProperties | undefined) | undefined
touchedboolean
—
touchedboolean
—- Name
- Description
Whether the field has been touched. Useful when the field state is controlled by an external library.
- Type
boolean | undefined
disabledboolean
false
disabledboolean
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
—
invalidboolean
—- Name
- Description
Whether the field is invalid. Useful when the field state is controlled by an external library.
- Type
boolean | undefined
validateUnion
—
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. Asynchronous functions are supported, but they do not prevent form submission when usingvalidationMode="onSubmit".- Type
| (( value: unknown, formValues: Record<string, unknown>, ) => | string | string[] | Promise<string | string[] | null> | null) | undefined
validationModeForm.ValidationMode
'onSubmit'
validationModeForm.ValidationMode
'onSubmit'
- Name
- Description
Determines when the field should be validated. This takes precedence over the
validationModeprop on<Form>.onSubmit: triggers validation when the form is submitted, and re-validates on change after submission.onBlur: triggers validation when the control loses focus.onChange: triggers validation on every change to the control value.
- Type
'onBlur' | 'onChange' | 'onSubmit' | undefined- Default
'onSubmit'
validationDebounceTimenumber
0
validationDebounceTimenumber
0
- Description
How long to wait between
validatecallbacks ifvalidationMode="onChange"is used. Specified in milliseconds.- Type
number | undefined- Default
0
classNamestring | function
—
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 | undefined)
renderReactElement | function
—
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
Present when the field is disabled.
data-valid
Present when the field is valid.
data-invalid
Present when the field is invalid.
data-dirty
Present when the field's value has changed.
data-touched
Present when the field has been touched.
data-filled
Present when the field is filled.
data-focused
Present when the field control is focused.
Label
An accessible label that is automatically associated with the field control.
Renders a <label> element.
styleReact.CSSProperties | function
—
styleReact.CSSProperties | function
—- Name
- Type
| React.CSSProperties | ((state: Field.Root.State) => CSSProperties | undefined) | undefined
classNamestring | function
—
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 | undefined)
renderReactElement | function
—
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
Present when the field is disabled.
data-valid
Present when the field is in valid state.
data-invalid
Present when the field is in invalid state.
data-dirty
Present when the field's value has changed.
data-touched
Present when the field has been touched.
data-filled
Present when the field is filled.
data-focused
Present when the field control is 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
—
defaultValueUnion
—- Name
- Type
string | number | string[] | undefined
onValueChangefunction
—
onValueChangefunction
—- Name
- Description
Callback fired when the
valuechanges. Use when controlled.- Type
| (( value: string, eventDetails: Field.Control.ChangeEventDetails, ) => void) | undefined
styleReact.CSSProperties | function
—
styleReact.CSSProperties | function
—- Name
- Type
| React.CSSProperties | ((state: Field.Root.State) => CSSProperties | undefined) | undefined
classNamestring | function
—
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 | undefined)
renderReactElement | function
—
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
Present when the field is disabled.
data-valid
Present when the field is in valid state.
data-invalid
Present when the field is in invalid state.
data-dirty
Present when the field's value has changed.
data-touched
Present when the field has been touched.
data-filled
Present when the field is filled.
data-focused
Present when the field control is focused.
Description
A paragraph with additional information about the field.
Renders a <p> element.
styleReact.CSSProperties | function
—
styleReact.CSSProperties | function
—- Name
- Type
| React.CSSProperties | ((state: Field.Root.State) => CSSProperties | undefined) | undefined
classNamestring | function
—
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 | undefined)
renderReactElement | function
—
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
Present when the field is disabled.
data-valid
Present when the field is in valid state.
data-invalid
Present when the field is in invalid state.
data-dirty
Present when the field's value has changed.
data-touched
Present when the field has been touched.
data-filled
Present when the field is filled.
data-focused
Present when the field control is focused.
Item
Groups individual items in a checkbox group or radio group with a label and description.
Renders a <div> element.
styleReact.CSSProperties | function
—
styleReact.CSSProperties | function
—- Name
- Type
| React.CSSProperties | ((state: Field.Root.State) => CSSProperties | undefined) | undefined
disabledboolean
false
disabledboolean
false
- Name
- Description
Whether the wrapped control should ignore user interaction. The
disabledprop on<Field.Root>takes precedence over this.- Type
boolean | undefined- Default
false
classNamestring | function
—
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 | undefined)
renderReactElement | function
—
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)
Error
An error message displayed if the field control fails validation.
Renders a <div> element.
styleReact.CSSProperties | function
—
styleReact.CSSProperties | function
—- Name
- Type
| React.CSSProperties | ((state: Field.Root.State) => CSSProperties | undefined) | undefined
matchUnion
—
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
—
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 | undefined)
renderReactElement | function
—
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
Present when the field is disabled.
data-valid
Present when the field is in valid state.
data-invalid
Present when the field is in invalid state.
data-dirty
Present when the field's value has changed.
data-touched
Present when the field has been touched.
data-filled
Present when the field is filled.
data-focused
Present when the field control is 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: Field.Validity.State) => ReactNode)
—
children*((state: Field.Validity.State) => ReactNode)
—- Name
- Description
A function that accepts the field validity state as an argument.
<Field.Validity> {(validity) => { return <div>...</div> }} </Field.Validity>- Type
(state: Field.Validity.State) => ReactNode