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

本文探讨了在React应用中使用DatePicker组件时遇到的问题,即服务端返回的日期格式(YYYYMMDD)在组件初始化时正常显示,但在未操作直接提交时出现错误。通过调整initialValue的设置方式,从提前转换为moment对象改为在initialValue中直接转换格式,解决了提交时的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

有一个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) =>

                    <FormItem>
                    {getFieldDecorator("Date" + index, {
                        initialValue: record.EffDate,
                    })(
                    <DatePicker
                        style={{ width: 120 }}
                        onChange={(value) => {
                            this.handleChange(value, record, index, 'Date')
                        }} />)}
                    </FormItem>
            },
            ...
    ]

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

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

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

解决方案:

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

而改为:

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

                    <FormItem>
                    {getFieldDecorator("Date" + index, {
                        initialValue: moment(record.Date, 'YYYY/MM/DD'),
                    })(
                    <DatePicker
                        style={{ width: 120 }}
                        onChange={(value) => {
                            this.handleChange(value, record, index, 'Date')
                        }} />)}
                    </FormItem>

不再报错。

猜测:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值