基于react的ant design写一个tsx组件,要求写DatePicker的,让其的value,可以接收字符串,原来只能接收Moment,需要做个转换。DatePicker中有个属性是picker,请根据picker的值,决定用什么方式格式化
以下是一个基于React和Ant Design的DatePicker组件的代码示例,可以接收字符串类型的value,并根据picker属性的值,在显示时进行相应的格式化。
import React, { useState, useEffect } from 'react';
import { DatePicker } from 'antd';
import moment from 'moment';
interface IProps {
value?: string;
onChange?: (value: string) => void;
picker?: 'date' | 'week' | 'month' | 'quarter' | 'year' | undefined;
}
const CustomDatePicker: React.FC<IProps> = ({ value, onChange, picker }) => {
const [dateValue, setDateValue] = useState<moment.Moment | null>(value ? moment(value) : null);
useEffect(() => {
if (value) {
setDateValue(moment(value));
} else {
setDateValue(null);
}
}, [value]);
const handleOnChange = (newValue: moment.Moment | null) => {
if (newValue) {
const formattedValue = newValue.format(getFormatString(picker));
onChange && onChange(formattedValue);
} else {
onChange && onChange('');
}
setDateValue(newValue);
};
const getFormatString = (picker?: string) => {
switch (picker) {
case 'week':
return 'YYYY-[W]WW';
case 'month':
return 'YYYY-MM';
case 'quarter':
return 'YYYY-[Q]Q';
case 'year':
return 'YYYY';
default:
return 'YYYY-MM-DD';
}
};
return (
<DatePicker value={dateValue} onChange={handleOnChange} picker={picker} format={getFormatString(picker)} />
);
};
export default CustomDatePicker;
在这个组件中,我们将传入的字符串类型的value转换为moment对象,并将其存储在组件内部的状态中。当value属性发生变化时,我们使用useEffect钩子函数对其进行更新。
在handleOnChange函数中,我们将新的值转换为相应的格式化字符串,并调用onChange回调函数将其传递出去。
getFormatString函数根据picker属性的值来决定使用何种格式化字符串。对于不同的picker属性值,我们使用不同的moment.js格式化选项来处理日期和时间。
最后,我们将DatePicker组件的value,onChange,picker属性和format属性设置为相应的值。由于我们已经在handleOnChange函数中处理了转换和格式化,因此format属性将不起作用,但是它仍然需要设置为正确的格式化字符串。
原文地址: https://www.cveoy.top/t/topic/tOj 著作权归作者所有。请勿转载和采集!