原因分析
其实很多时候是ts语法机制问题,主要是类型匹配上不,将这些类型改写成any即可。
为什么有的时候可以按照官网用不出错,有时又会出错呢?因为项目中使用的版本不一。
如何解决?请看下面:
1.antd官网源码
const { RangePicker } = DatePicker
const dateFormat = 'YYYY-MM-DD'
type RangeValue = [Dayjs | null, Dayjs | null] | null
const [dates, setDates] = useState<RangeValue>(null)
const [value, setValue] = useState<RangeValue>(null)
//设置可选范围最大为15天
const disabledDate = (current: Dayjs) => {
if (!dates) {
return false
}
const tooLate = dates[0] && current.diff(dates[0], 'days') > 15
const tooEarly = dates[1] && dates[1].diff(current, 'days') > 15
return !!tooEarly || !!tooLate
}
//每次选择清空上一次记录
const onOpenChange = (open: boolean) => {
if (open) {
setDates([null, null])
} else {
setDates(null)
}
}
//获取日期范围字符串
const onCalendarChange = (val: any) => {
setDates(val)
try {
let start = moment(val[0].valueOf()).format('YYYY-MM-DD')
console.log(start)
setstartdate(start)
if (val[1] !== null || val[1] !== undefined) {
let end = moment(val[1].valueOf()).format('YYYY-MM-DD')
console.log(end)
setenddate(end)
}
} catch (e) {
message.error('请按顺序输入起始日期!')
}
}
//日期选择组件
const operations = (
<div>
<RangePicker
locale={locale}
allowClear={false}
defaultValue={[
dayjs('2022-09-03', dateFormat),
dayjs('2022-09-18', dateFormat),
]}
value={dates || value}
disabledDate={disabledDate}
onCalendarChange={onCalendarChange}
onChange={(val) => setValue(val)}
onOpenChange={onOpenChange}
/>
</div>
)
2.修改后代码
主要是在定义时将类型都改为any,方法中参数current: Dayjs类型也改为current: any。
对于开始时间与结束时间,我们自己定义state放入,这样就解决了所有错误。
const { RangePicker } = DatePicker;
const [dates, setDates] = useState<any>(null);
const [value, setValue] = useState<any>(null);
const [startdate, setstartdate] = useState<any>();
const [enddate, setenddate] = useState<any>();
//设置可选范围最大为15天
const disabledDate = (current:any ) => {
if (!dates) {
return false;
}
const tooLate = dates[0] && current.diff(dates[0], 'days') > 15;
const tooEarly = dates[1] && dates[1].diff(current, 'days') > 15;
return !!tooEarly || !!tooLate;
};
//每次选择清空上一次记录
const onOpenChange = (open: boolean) => {
if (open) {
setDates([null, null]);
} else {
setDates(null);
}
};
//获取日期范围字符串
const onCalendarChange = (val: any) => {
setDates(val);
try {
let start = moment(val[0].valueOf()).format('YYYY-MM-DD');
console.log(start);
setstartdate(start);
if (val[1] !== null || val[1] !== undefined) {
let end = moment(val[1].valueOf()).format('YYYY-MM-DD');
console.log(end);
setenddate(end);
}
} catch (e) {
message.error('请按顺序输入起始日期!');
}
};
//日期选择组件
const operations = (
<div>
<RangePicker
locale={locale}
allowClear={false}
//defaultValue={[dayjs('2022-09-03', dateFormat), dayjs('2022-09-18', dateFormat)]}
defaultValue={[startdate, enddate]}
value={dates || value}
disabledDate={disabledDate}
onCalendarChange={onCalendarChange}
onChange={onChange}
onOpenChange={onOpenChange}
/>
</div>
);
原文地址:https://blog.csdn.net/qq_37967853/article/details/128659865
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32274.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。