FormField
This component is statefully managed by its parent Form component with Formik. Custom event handlers may be provided for fine tuned control.
Result
Loading...
Live Editor
<FormonSubmit={(values, actions) => {console.log(values);setTimeout(() => {actions.setSubmitting(false);}, 1500);}}><div style={{ display: 'grid', gridGap: '1rem' }}><FormField><TextField name="textfield" label="TextField" /></FormField><FormField><NumberField name="numberField" label="NumberField" /></FormField><FormField><DatePicker name="date" label="Date" /></FormField><FormField><DatePicker name="datetime" label="Date & time" type="datetime-local" /></FormField><FormField><DatePicker name="time" label="Time" type="time" /></FormField><FormField><Select name="select" label="Select"><Item key="one">One</Item><Item key="two">Two</Item></Select></FormField><FormField><StartStopname="start-stop"startOptions={[{id: 'Start',defaultValue: '01/01/2000',label: 'Start (01/01/2000)',},]}stopOptions={[{id: 'Stop',defaultValue: '12/31/2022',label: 'Stop (12/31/2022)',},{id: 'Duration',label: 'Duration',defaultValue: 4,},]}/></FormField><FormField><MultiSelect name="multiSelect" label="MultiSelect"><Item key="one">One</Item><Item key="two">Two</Item></MultiSelect></FormField><FormField><Range name="range" label="Range" minValue={0} maxValue={100} /></FormField><FormField><Slidername="slider"label="Slider"value={2020}min={2015}max={2025}tickLabelFrequency={1}/></FormField><FormField><CheckboxGroup label="Favorite fruits" name="favoriteFruits"><CheckboxGroup.Item value="apples" label="Apples" /><CheckboxGroup.Item value="pears" label="Pears" /><CheckboxGroup.Item value="bananas" label="Bananas" /><CheckboxGroup.Item value="melons" label="Melons" /><CheckboxGroup.Item value="strawberries" label="Strawberries" /></CheckboxGroup></FormField><FormField><RadioGroup label="Favorite animal" name="favoriteAnimal"><RadioGroup.Item value="lion" label="Lion" /><RadioGroup.Item value="tiger" label="Tiger" /><RadioGroup.Item value="bear" label="Bear" /><RadioGroup.Item value="moose" label="Moose" /><RadioGroup.Item value="goose" label="Goose" /></RadioGroup></FormField><FormField><Checkbox name="lights" label="Lights" /></FormField><FormField><Checkbox name="camera" label="Camera" /></FormField><FormField><Switch name="action" label="Action" /></FormField></div></Form>
Validation
Sync Field Level Validation
Result
Loading...
Live Editor
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));function Example() {const handleSubmit = (values, actions) => {console.log({ values, actions });setTimeout(() => {actions.setSubmitting(false);}, 1500);};return (<FormonSubmit={handleSubmit}initialValues={{select: 'one',multiSelect: ['two'],camera: true,action: true,favoriteFruits: ['bananas', 'apples'],favoriteAnimal: 'moose',}}><div style={{ display: 'grid', gridGap: '1rem' }}><FormFieldvalidate={(value) =>sleep(1000).then(() => {if (value === 'a') {return 'This is no good.';}})}><TextField name="textfield" label="TextField" /></FormField><FormField><NumberField name="numberField" label="NumberField" /></FormField><FormField><Select name="select" label="Select"><Item key="one">One</Item><Item key="two">Two</Item></Select></FormField><FormField><MultiSelect name="multiSelect" label="MultiSelect"><Item key="one">One</Item><Item key="two">Two</Item></MultiSelect></FormField><FormField><MultiSelect name="multiSelect" label="MultiSelect"><Item key="one">One</Item><Item key="two">Two</Item></MultiSelect></FormField><FormField><Range name="range" label="Range" minValue={0} maxValue={100} /></FormField><FormField><Slidername="slider"label="Slider"value={2020}min={2010}max={2030}tickLabelFrequency={1}/></FormField><FormField><CheckboxGroup label="Favorite fruits" name="favoriteFruits"><CheckboxGroup.Item value="apples" label="Apples" /><CheckboxGroup.Item value="pears" label="Pears" /><CheckboxGroup.Item value="bananas" label="Bananas" /><CheckboxGroup.Item value="melons" label="Melons" /><CheckboxGroup.Item value="strawberries" label="Strawberries" /></CheckboxGroup></FormField><FormField><RadioGroup label="Favorite animal" name="favoriteAnimal"><RadioGroup.Item value="lion" label="Lion" /><RadioGroup.Item value="tiger" label="Tiger" /><RadioGroup.Item value="bear" label="Bear" /><RadioGroup.Item value="moose" label="Moose" /><RadioGroup.Item value="goose" label="Goose" /></RadioGroup></FormField><FormField><Checkbox name="lights" label="Lights" /></FormField><FormField><Checkbox name="camera" label="Camera" /></FormField><FormField><Switch name="action" label="Action" /></FormField></div></Form>);}render(<Example />);
Async Field Level Validation
Result
Loading...
Live Editor
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));function Example() {const handleSubmit = (values, actions) => {console.log({ values, actions });};return (<Formid="single-field-async"onSubmit={handleSubmit}initialValues={{ 'the-switch': 'on' }}><FormFieldvalidate={(value) =>sleep(1000).then(() => {if (value === 'a') {return 'This is no good.';}})}><TextFieldname="textfield"label="TextField"description="Try setting to 'a' and waiting"/></FormField></Form>);}render(<Example />);