https://4x-ant-design.antgroup.com/components/date-picker-cn/...
上面是antd的rangepicker选择7天时间段的例子。放到form中要怎么写呢?form劫持了value和onchange,导致和示例不一样
import { Button, DatePicker, Form, Input } from 'antd';
import { Dayjs } from 'dayjs';
import React, { useState } from 'react'
const { RangePicker } = DatePicker;
type RangeValue = [Dayjs | null, Dayjs | null] | null;
export default function FormDemo() {
const [dates, setDates] = useState<RangeValue>(null);
const [value, setValue] = useState<RangeValue>(null);
const disabledDate = (current: Dayjs) => {
if (!dates) {
return false;
}
const tooLate = dates[0] && current.diff(dates[0], 'days') > 7;
const tooEarly = dates[1] && dates[1].diff(current, 'days') > 7;
return !!tooEarly || !!tooLate;
};
const onOpenChange = (open: boolean) => {
if (open) {
setDates([null, null]);
} else {
setDates(null);
}
};
const onFinish = (values: any) => {
console.log('Success:', values);
};
const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo);
};
return (
<div>
<Form
name="basic"
labelCol={{ span: 8 }}
wrapperCol={{ span: 16 }}
onFinish={onFinish}
onFinishFailed={onFinishFailed}
autoComplete="off"
>
<Form.Item name="remember">
<RangePicker
value={dates || value}
disabledDate={disabledDate}
onCalendarChange={val => setDates(val)}
onChange={val => setValue(val)}
onOpenChange={onOpenChange}
onBlur={() => console.log('blur has been triggered')}
/>
</Form.Item>
<Form.Item wrapperCol={{ offset: 8, span: 16 }}>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
</div>
)
}
你可以把RangePicker 的 value 和 onChange 事件通过 Form.Item 的 getValueProps 和 getValueFromEvent 进行处理:
这样一来,Form.Item 能够正确地获取和设置 RangePicker 的值,同时你的代码中的功能也得以保留。