Wrappers for formik that simplify usage with semantic-ui-react.
Benefits:
- No need to manage form state
- handles
onChangefor you - Normalize all input events to provide a
value(Ex:value: truefor Checkbox instead ofchecked - Easily handle showing validation messages from client or server
- REDUCES BOILERPLATE
Install: npm i formik-semantic-ui
Ex:
<Form initialValues={{emailAddress:""}} onSubmit={(values, formikApi) => {
api.save(values);
formikApi.setFieldError('emailAdress', 'already in use')
}}>
<Input label="Email" name="emailAddress" />
<Button.Submit>Submit</Button.Submit>
<Button.Reset>Cancel</Button.Reset>
</Form>Demo:
- Input
- Dropdown
optionscan be passed to component directly or throughinputProps
- Checkbox
- TextArea
props:
| Property | Required | Default | Desc |
|---|---|---|---|
| name | required | formik property key checks touched, errors, and values |
|
| id | optional | field_input_${count} |
used to override default id put on component and associated via label |
| label | optional | undefined |
displays label on <Form.Field> |
| inputProps | optional | {} |
props to be passed to matching Semantic-UI component. Ex: {type:"password"} on <Input /> |
| fieldProps | optional | {} |
props passed to <Form.Field /> |
| errorComponent | optional | span with class sui-error-message |
Use a component that receive a message prop (can be used also as a render prop) |
| inputRef | optional | ref function to get handle to dom element (does not work on DropDown) | |
| fast | optional | false | whether to use formik's FastField (beneficial for large forms) |
Produce Semantic-UI:
<Form.Field error={checks errors}>
<label />
<CONNECTED_FORMIK_COMPONENT /> /* Example <Input /> */
<span className="sui-error-message">Some error message</span>
</Form.Field><Form />
- Usage
- Simple Usage - Components as children
- Enhanced Usage - "Render Prop" similar to default Formik "Render Prop"
render={formikProps => <Form />}- function as a child
- Automatically binds Formik
handleSubmitfor Semantic UI FormonSubmit - Automatically binds Formik
isSubmittingfor Semantic UI Formloading ignoreLoading- if you wish to disconnect the Formsloadingprop fromisSubmitting- Accepts all
<Formik />props EXCEPTcomponent - Accepts the following props from Semantic UI
<Form />- className
- inverted
- size
Ex:
<Form
{...props}
onSubmit={handleSubmit}
loading={!props.ignoreLoading && isSubmitting}
/><Form.Children /> - alias for <React.Fragment> to better show intent when using render prop
- Button -
<Button {...props} type="button" /> - Button.Submit -
<Button primary {...props} type="submit" /> - Button.Reset -
<Button basic {...props} type="button" onClick={handleReset} />
Current:
- Object
keysmap to componentnameprop - Defaults to
Inputif type is unknown - Unknown types pass their
typetoInput type={type} - You can provide an initial value
- Very basic width via
fieldProps
- Document this better
- Handle grouping
Usage:
<Form
onSubmit={this._handleSubmit}
schema={{
emailAddress: {
label: 'Email Address',
type: 'text',
value: '[email protected]',
},
ssn: {
label: 'SSN',
type: 'password',
fieldProps: {
width: 8,
},
},
notes: {
label: 'Notes',
type: 'textarea',
inputProps: {
rows: '6',
},
},
likes: {
label: 'Favorite Food',
type: 'dropdown',
options: [
{text: 'Pizza', value: 'pizza'},
{text: 'I am wrong', value: 'im-wrong'},
],
},
agree: {
label: 'I Agree',
type: 'checkbox',
},
}}
>
<Button.Submit>Submit</Button.Submit>
<Button.Reset>Cancel</Button.Reset>
</Form>