Close
- Redux Form
- Examples
- React Widgets Form Example
React Widgets Example
This is a demonstration of how to connect
react-widgets form elements to redux-form
.
Very few modifications are needed. All of these can be done as props to the Field
component.
Multiselect
- Needs
onBlur
to be rewritten ignoring the parameter - Needs value to be an array, so default it to
[]
- Needs
SelectList
- Needs
onBlur
to be rewritten ignoring the parameter
- Needs
DateTimePicker
- Needs value to be a date or null.
For more information, see the react-widgets
docs.
The delay between when you click "Submit" and when the alert dialog pops up is intentional, to simulate server latency.
Running this example locally
To run this example locally on your machine clone the redux-form
repository,
then cd redux-form
to change to the repo directory, and run npm install
.
Then run npm run example:react-widgets
or manually run the
following commands:
cd ./examples/react-widgets
npm install
npm start
Then open localhost:3030
in your
browser to view the example running locally on your machine.
Form
Values
undefined
Code
ReactWidgetsForm.js
import React from 'react'
import { Field, reduxForm } from 'redux-form'
import DropdownList from 'react-widgets/lib/DropdownList'
import SelectList from 'react-widgets/lib/SelectList'
import Multiselect from 'react-widgets/lib/Multiselect'
import DateTimePicker from 'react-widgets/lib/DateTimePicker'
import moment from 'moment'
import momentLocaliser from 'react-widgets/lib/localizers/moment'
import 'react-widgets/dist/css/react-widgets.css'
momentLocaliser(moment)
const colors = [ { color: 'Red', value: 'ff0000' },
{ color: 'Green', value: '00ff00' },
{ color: 'Blue', value: '0000ff' } ]
const renderDropdownList = ({ input, data, valueField, textField }) =>
<DropdownList {...input}
data={data}
valueField={valueField}
textField={textField}
onChange={input.onChange} />
const renderMultiselect = ({ input, data, valueField, textField }) =>
<Multiselect {...input}
onBlur={() => input.onBlur()}
value={input.value || []} // requires value to be an array
data={data}
valueField={valueField}
textField={textField}
/>
const renderSelectList = ({ input, data }) =>
<SelectList {...input}
onBlur={() => input.onBlur()}
data={data} />
const renderDateTimePicker = ({ input: { onChange, value }, showTime }) =>
<DateTimePicker
onChange={onChange}
format="DD MMM YYYY"
time={showTime}
value={!value ? null : new Date(value)}
/>
let ReactWidgetsForm = props => {
const { handleSubmit, pristine, reset, submitting } = props
return (
<form onSubmit={handleSubmit}>
<div>
<label>Favorite Color</label>
<Field
name="favoriteColor"
component={renderDropdownList}
data={colors}
valueField="value"
textField="color"/>
</div>
<div>
<label>Hobbies</label>
<Field
name="hobbies"
component={renderMultiselect}
data={[ 'Guitar', 'Cycling', 'Hiking' ]}/>
</div>
<div>
<label>Sex</label>
<Field
name="sex"
component={renderSelectList}
data={[ 'male', 'female' ]}/>
</div>
<div>
<label>DOB</label>
<Field
name="dob"
showTime={false}
component={renderDateTimePicker}
/>
</div>
<div>
<button type="submit" disabled={pristine || submitting}>Submit</button>
<button type="button" disabled={pristine || submitting} onClick={reset}>Reset Values
</button>
</div>
</form>
)
}
ReactWidgetsForm = reduxForm({
form: 'reactWidgets' // a unique identifier for this form
})(ReactWidgetsForm)
export default ReactWidgetsForm