Antd Design中DatePicker组件的初始化问题

问题:

有一个Table 里面有一列数据是Date数据,用DatePicker组件展示,

我需要拿到服务端返回来的数据对DatePicker组件进行初始化。

服务端返回来的数据格式如下:YYYYMMDD

 

一开始的解决方案:

在构造器阶段拿到数据后转换成moment形式的数据

    constructor(props) {
        ....
        this.state = {
            tempData: [], //tempData use for submit
        };
        ...
        this.formatData(tempData);//tempData from Calling Service
        this.setState({
            tempData: tempData,
        })
        ...
    }

    formatData = (list) => {
        if (list != null) {
            for (let i in list) {
                if (list[i]["Date"] != '' && list[i]["Date"] != null)
                    list[i]["Date"] = moment(list[i]["Date"], 'YYYYMMDD');
            }
        }
    }

然后在下面的列表进行render时直接进行初始化:

        const columns = [   
            ..., 
            {
                title: 'Date',
                dataIndex: 'Date',
                key: 'Date',
                width: 125,
                render: (text, record, index) =>

                    
                    {getFieldDecorator("Date" + index, {
                        initialValue: record.EffDate,
                    })(
                     {
                            this.handleChange(value, record, index, 'Date')
                        }} />)}
                    
            },
            ...
    ]

数据读取下来的时候没有问题

当不对DatePicker进行任何操作提交的时候:报错:

Antd Design中DatePicker组件的初始化问题_第1张图片

Antd Design中DatePicker组件的初始化问题_第2张图片

报错原因:看不出来具体原因,希望有大大能知会我,只能看出CalenderWrapper最后去调用locale进行国际化处理,然后报错,因为value.locale不是一个方法

解决方案:

不提前对数据进行类型转换

而改为:

 initialValue: moment(record.Date, 'YYYY/MM/DD'),

                    
                    {getFieldDecorator("Date" + index, {
                        initialValue: moment(record.Date, 'YYYY/MM/DD'),
                    })(
                     {
                            this.handleChange(value, record, index, 'Date')
                        }} />)}
                    

不再报错。

猜测:

提前转换成类型moment的数据可以设置进table中的formitem中,但是当表单提交的时候,这个moment的数据缺少了某些必要属性。

而在 initialValue里面进行赋值的时候,可能这个moment数据还被添加了一些属性,提交能够成功。

你可能感兴趣的:(React)