ant-design getFieldDecorator 无法获取自定义组件的值
2018-10-14 09:23
1196 查看
1.自定义或第三方的表单控件,也可以与 Form 组件一起使用。只要该组件遵循以下的约定:
(1)提供受控属性 value 或其它与 valuePropName 的值同名的属性。
(2)提供 onChange 事件或 trigger 的值同名的事件。
(3)不能是函数式组件。
2.创建组件
components/PriceInput/index.js
import React, { PureComponent } from 'react'; import { Input, Select } from 'antd'; const Option = Select.Option; export default class PriceInput extends PureComponent { constructor(props) { super(props); const value = props.value || {}; this.state = { number: value.number || 0, currency: value.currency || 'rmb', }; } componentWillReceiveProps(nextProps) { // Should be a controlled component. if ('value' in nextProps) { const value = nextProps.value; this.setState(value); } } handleNumberChange = (e) => { const number = parseInt(e.target.value || 0, 10); if (isNaN(number)) { return; } if (!('value' in this.props)) { this.setState({ number }); } this.triggerChange({ number }); } handleCurrencyChange = (currency) => { if (!('value' in this.props)) { this.setState({ currency }); } this.triggerChange({ currency }); } triggerChange = (changedValue) => { // Should provide an event to pass value to Form. const onChange = this.props.onChange; if (onChange) { onChange(Object.assign({}, this.state, changedValue)); } } render() { const { size } = this.props; const state = this.state; return ( <span> <Input type="text" size={size} value={state.number} onChange={this.handleNumberChange} style={{ width: '65%', marginRight: '3%' }} /> <Select value={state.currency} size={size} style={{ width: '32%' }} onChange={this.handleCurrencyChange} > <Option value="rmb">RMB</Option> <Option value="dollar">Dollar</Option> </Select> </span> ); } }
3.调用
import React, { PureComponent } from 'react'; import { Form, Button } from 'antd'; const FormItem = Form.Item; class Demo extends PureComponent { handleSubmit = (e) => { e.preventDefault(); this.props.form.validateFields((err, values) => { if (!err) { console.log('Received values of form: ', values); } }); } checkPrice = (rule, value, callback) => { if (value.number > 0) { callback(); return; } callback('Price must greater than zero!'); } render() { const { getFieldDecorator } = this.props.form; return ( <Form layout="inline" onSubmit={this.handleSubmit}> <FormItem label="Price"> {getFieldDecorator('price', { initialValue: { number: 0, currency: 'rmb' }, rules: [{ validator: this.checkPrice }], })(<PriceInput />)} </FormItem> <FormItem> <Button type="primary" htmlType="submit">Submit</Button> </FormItem> </Form> ); } } const WrappedDemo = Form.create()(Demo); export default WrappedDemo;
.
相关文章推荐
- 实现Ant Design 自定义表单组件
- Android实现Ant Design 自定义表单组件
- 【Android】利用自定义View的重绘实现拖动移动,获取组件的尺寸
- 跨域无法获取自定义header的问题
- 在自定义Pipeline组件中实现drop-down list类型的Design-Time Property
- 解决Zabbix自定义用户参数无法获取到数据的问题
- react项目-使用antdesign组件库的总结
- 自定义组件属性定义获取
- 【原】基础篇:第十二篇,Ext组件系列之--如何获取后台返回的自定义错误信息和系统异常信息
- 下拉选择组件从内部组件到 ant-design 不得不说的三个故事
- Ant Design踩坑(一)Form自定义校验多次发送请求的问题
- php getallheaders无法获取自定义头的问题
- 实现炫酷的获取本地图片和相机拍照图片-自定义组件
- .net(C#)无法获取Java Web Service返回自定义类型的值
- Ant-Design-Pro中Table组件rowSelection方法的一些坑
- Ant自定义任务返回值获取
- 解决Enterprise Library(微软企业库)数据组件无法获取表的主键
- 获取自定义组件的宽度和高度
- CORS跨域时axios无法获取服务器自定义的header信息
- 快速解决commons-fileupload组件无法处理自定义head信息的bug