TextInput
is a form component, that allows users to input text or numbers and should be used in a form context.
TextInput
is supporting different types of inputs, like text
, email
, file
, number
, password
, search
, url
, where text
is the default.
Import
import { TextInput } from '@contentful/f36-components';// orimport { TextInput } from '@contentful/f36-forms';
Examples
Using as a controlled input
Controlled components in React are those in which form data is handled by the component’s state.
For using the TextInput
as a controlled input, you need to:
- Pass
value
property, with this property it will already be a controlled component; - Pass
onChange
handler, so you can use it to update the value of the input;
Using as an uncontrolled input
Uncontrolled components are those for which the form data is handled by the DOM itself. “Uncontrolled” refers to the fact that these components are not controlled by React state.
You can use the TextInput
as an uncontrolled input, for that you can:
- Set the
defaultValue
property, it will ensure that the initial value of the input is set. - Don't set the
value
as it will make the input controlled.
Using outside of forms
When TextInput
is used outside of form (without FormControl
) and has no <label>
associated with it, you need to specify aria-label
.
With action buttons
TextInput.Group
enables the user to set a button at the start or end of an input, with some spacing or collapsed.
Example of usage:
Different states
Props (API reference)
TextInput
- Name
className
DescriptionCSS class to be appended to the root element
string - Name
defaultValue
DescriptionSet's default value for text input
string - Name
icon
DescriptionExpects any of the icon components
ReactElement<any, string | JSXElementConstructor<any>> - Name
id
DescriptionSets the id of the input
string - Name
isDisabled
DescriptionApplies disabled styles
falsetrue - Name
isInvalid
DescriptionApplies invalid styles
falsetrue - Name
isReadOnly
DescriptionApplies read-only styles
falsetrue - Name
isRequired
DescriptionValidate the input
falsetrue - Name
name
DescriptionSet the name of the input
string - Name
onBlur
DescriptionAllows to listen to an event when an element loses focus
FocusEventHandler<HTMLInputElement | HTMLTextAreaElement> - Name
onChange
DescriptionAllows to listen to an input’s change in value
ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement> - Name
onFocus
DescriptionAllows to listen to an event when an element get focused
FocusEventHandler<HTMLInputElement | HTMLTextAreaElement> - Name
onKeyDown
DescriptionAllows to listen to an event when a key is pressed
KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement> - Name
size
DescriptionDefines which size of the input should be rendered
Default"small""medium"medium - Name
testId
DescriptionA [data-test-id] attribute used for testing purposes
Defaultstringcf-ui-text-input - Name
type
DescriptionSet the type of the input
"number""text""email""file""password""search""url" - Name
value
DescriptionSet the value of the input
string - Name
willBlurOnEsc
DescriptionBoolean property that allows to blur on escape
falsetrue
TextInput.Group
- Name
children(required)
ReactNode - Name
className
DescriptionCSS class to be appended to the root element
string - Name
spacing
DescriptionSets the spacing of the elements if variant is separate.
"spacing2Xs""spacingXs""spacingS""spacingM""spacingL""spacingXl""spacing2Xl""spacing3Xl""spacing4Xl""none" - Name
testId
DescriptionA [data-test-id] attribute used for testing purposes
string
Content guidelines
- Use direct and succinct copy that helps a user to successfully complete a form
- Do not preface the instructions with introductory text, such as "please"
- Use sentence style caps (in which only the first word of a sentence or term is capitalized)
Accessibility
- To ensure
TextInput
meets accessibility standards, providename
andid
- Keep in mind that to provide that accessible inputs, you need to use labels.
- If you decide, that for some reason you would not use the label, please provide
aria-label
attribute to make it accessible for technologies like screen readers.