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.

name

string

Name
Description

Identifies the field when a form is submitted. Takes precedence over the name prop on the <Field.Control> component.

Type

string

disabled

boolean

(default:

false

)
Description

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

Type

boolean

Default

false

invalid

boolean

Description

Whether the field is forcefully marked as invalid.

Type

boolean

validate

Union

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)

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'

Default

'onBlur'

validationDebounceTime

number

(default:

0

)
Description

How long to wait between validate callbacks if validationMode="onChange" is used. Specified in milliseconds.

Type

number

Default

0

className

string | 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)

render

ReactElement | 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.

className

string | 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)

render

ReactElement | 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.

defaultValue

Union

Type

string | number | string[]

onValueChange

function

Description

Callback fired when the value changes. Use when controlled.

Type

((value: string, event: Event) => void)

className

string | 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)

render

ReactElement | 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.

className

string | 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)

render

ReactElement | 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.

match

Union

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'

className

string | 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)

render

ReactElement | 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)