Field

A component that provides labelling and validation for form controls.

View as Markdown

Visible on your profile

Anatomy

Import the component and assemble its parts:

Anatomy

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 name prop on the <Field.Control> component.

Type
string | undefined
disabledboolean(default: false)
Description

Whether the component should ignore user interaction. Takes precedence over the disabled prop on the <Field.Control> component.

Type
boolean | undefined
Default
false
invalidboolean
Description

Whether the field is forcefully marked as invalid.

Type
boolean | undefined
validateUnion
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 null if the value is valid.

Type
| ((
    value: unknown,
    formValues: Record<string, unknown>,
  ) =>
    | string
    | string[]
    | Promise<string | string[] | null>
    | null)
| undefined
validationMode'onBlur' | 'onChange'(default: 'onBlur')
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 validate callbacks if validationMode="onChange" is used. Specified in milliseconds.

Type
number | undefined
Default
0
classNamestring | function
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 ReactElement or 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.

classNamestring | function
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 ReactElement or 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
Type
string | number | string[] | undefined
onValueChangefunction
Description

Callback fired when the value changes. Use when controlled.

Type
| ((
    value: string,
    eventDetails: Field.Control.ChangeEventDetails,
  ) => void)
| undefined
classNamestring | function
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 ReactElement or 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.

classNamestring | function
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 ReactElement or 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.

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 true will 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
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 ReactElement or 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: FieldValidityState) => ReactNode)
Description

A function that accepts the field validity state as an argument.

Type
(state: FieldValidityState) => ReactNode