Antd DatePicker 组件报错Invalid prop `value` of type `string` supplied to `Calendar`, expected `object`

我使用的是Form+DatePicker,当我给DatePicker的FormItem的getFieldDecorator的initialValue设置初始值为空字符串时,当我打开新增或者编辑页面就报了以下错误:
Invalid prop value of type string supplied to Calendar, expected object

图例
我们通过报❌,很明显的能知道是我们传给组件的初始值类型错了
查看了下官网,我们发现DatePicker组件的defaultValue只支持moment日期对象
官网图例
因此,我尝试将代码改成:initialValue: moment(),然后再次查看,发现没有再次报错了✅
然而,写成initialValue: moment()只是方便测试,我们应该写成这样子:

const date = type == 'edit' ? moment(time, 'YYYY/MM/DD HH:mm') : null // 注意 这里不能返回moment() 否则默认值是当前日期,更不能写{},他不是个日期格式的数据,虽然要求是object类型,但是数值无法被组件成功解析

————————————————

当然,前提是<DatePicker showTime={{ format: ‘HH:mm’ }} format='YYYY-MM-DD HH:mm' placeholder=‘请输入发布时间’ />
format必须设置

import React, { Component } from 'react'
import { Modal, Form, DatePicker, Input } from 'antd'
import moment from 'moment';
const FormItem = Form.Item
const { TextArea } = Input
class TipsModal extends Component {

	componentDidMount() {
		this.props.getTipsModalForm(this.props.form)
	}

	render() {
		const { getFieldDecorator } = this.props.form
		const { visible, onCancel, onOk, record, type } = this.props
		const FormItemLayout = {
			labelCol: { span: 5 },
			wrapperCol: { span: 19 }
		}
		const title = type == 'edit' ? '编辑投标战况' : '新增投标战况'
		const time = moment(record.releaseTime).utc(480).format()
		const date = type == 'edit' ? moment(time, 'YYYY/MM/DD HH:mm') : null // 注意 这里不能返回moment() 否则默认值是当前日期,更不能写{},他不是个日期格式的数据,虽然要求是object类型,但是数值无法被组件成功解析
		const des = type == 'edit' ? record.tip : ''
		return (
			<Modal
				title={title}
				visible={visible}
				onOk={onOk}
				onCancel={onCancel}
			>
				<Form>
					<FormItem {...FormItemLayout} label='产品名称'>
						{getFieldDecorator('prdName', {
							initialValue: '',
						})(
							<h3>{record.projName}</h3>
						)}
					</FormItem>
					<FormItem {...FormItemLayout} label='发布时间'>
						{getFieldDecorator('releaseTime', {
							// initialValue: ’‘,
							initialValue: date,
							rules: [{ required: true, message: "请输入发布时间" }],
						})(
							<DatePicker showTime={{ format: 'HH:mm' }} format='YYYY-MM-DD HH:mm' placeholder='请输入发布时间' />
						)}
					</FormItem>
					<FormItem {...FormItemLayout} label='投标战况'>
						{getFieldDecorator('tip', {
							initialValue: des,
							rules: [{ required: true, message: "请输入投标战况" }],
						})(
							<TextArea placeholder='请输入投标战况' autosize={{ minRows: 3, maxRows: 6 }} />
						)}
					</FormItem>
				</Form>
			</Modal>
		)
	}
}

export default Form.create()(TipsModal)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值