封装一个漂亮的ant design form 时间选择组件

在ant design 的form组件中 能用于提交的组件比较少,所以我在这写了一个可以用日期选择提交的组件,调用非常简单。

代码:

 1 import React,{Fragment} from 'react';
 2 import moment from 'moment';
 3 import { DatePicker,Input } from 'antd';
 4 export interface Props {
 5     style?:any,//样式
 6     default?:string | moment.Moment,//默认值
 7     form?:any,//表单
 8     validationName?:string,//提交名称,用于菜单提交获取
 9     submitString?:boolean,//提交类型为字符串
10     format?:string,//字符串格式,用于默认值及提交值
11 }
12  
13 export interface State {
14     date:moment.Moment | undefined,//选中的时间值,moment类型
15     dateVal:string,//选中的时间值,string类型
16 }
17  
18 class myDatePicker extends React.Component<Props, State> {
19     constructor(props: Props) {
20         super(props);
21         this.state = { 
22             date: typeof this.props.default === 'string'?moment(this.props.default,this.props.format):this.props.default,
23             dateVal: typeof this.props.default === 'string'?this.props.default:(this.props.default!==undefined?this.props.default.format(this.props.format):''),
24         };
25     }
26     setData=(moment:moment.Moment | null,dateVal:string)=>{
27         let date:moment.Moment | undefined;
28         if(moment === null){
29             date = undefined;
30         }else{
31             date = moment;
32         }
33         this.setState({date,dateVal});
34     }
35     render() { 
36         return (
37             <Fragment>
38                 <DatePicker value = {this.state.date} onChange={(moment:moment.Moment | null,dateVal:string)=>
39                     {this.setData(moment,dateVal)}} style={this.props.style} />
40                 {
41                     this.props.form!== undefined && this.props.form.getFieldDecorator !== undefined?
42                     this.props.form.getFieldDecorator(this.props.validationName!== undefined ? this.props.validationName:'datePicker', {
43                         initialValue: this.props.submitString ? this.state.dateVal : this.state.date,
44                       })(<Input type="hidden"/>)
45                     :undefined
46                 }
47             </Fragment> 
48          );
49     }
50 }
51 export default myDatePicker;

调用示例:

 

效果:

 

 

 

 

 

 

也可以在普通页面中调用:

 

 获取字符串类型选择的时间值

 

 获取moment类型选择的时间值

posted @ 2019-12-30 11:59  不老梦  阅读(1003)  评论(0编辑  收藏  举报