ant

阅读: 评论:0

ant

ant

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 });}iggerChange({ number });}handleCurrencyChange = (currency) => {if (!('value' in this.props)) {this.setState({ currency });}iggerChange({ currency });}triggerChange = (changedValue) => {// Should provide an event to pass value st onChange = Change;if (onChange) {onChange(Object.assign({}, this.state, changedValue));}}render() {const { size } = this.props;const state = this.state;return (<span><Inputtype="text"size={size}value={state.number}onChange={this.handleNumberChange}style={{ width: '65%', marginRight: '3%' }}/><Selectvalue={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 = ate()(Demo);export default WrappedDemo;

.

本文发布于:2024-01-31 20:45:58,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670515731240.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:ant
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23