常用二次封装Ant-design组件(2)--- DatePicker

文章讲述了如何在React项目中使用DatePicker组件并结合Radio.Group实现日期选择的自定义形态,包括不同展示模式的切换和日期范围的选择。作者还分享了如何处理DatePicker的显示和隐藏问题以及样式调整技巧。

前言:依赖DatePicker二开的一个组件,主要是对Datepicker默认的展示形态进行一个处理(强烈建议Antd后续出自定义),如果React有现成能达到这种要求的包,求大佬告知(感觉肯定是有的,就是我不知道,焯)。

设计需求

需求展示形态单个模块,这里实现的时候用了Radio.Group作形态主体,antd的DatePicker组件里其实有一个api为variant(形态变体),只不过只能调整边框和背景,类似ghost效果,但感觉后面版本会支持自定义。

代码实现(ts)

这两个代码是放在一个文件里的,这里拆开是方便阅读。

使用

<RadioTimePciker
    onFinished={(date, dateString, type) => {
				console.log(date, dateString, type);
			}}
/>

RadioGroup形态代码


const raditoStyle: React.CSSProperties = {
	width: "60px",
	height: "32px",
	textAlign: "center",
	paddingInline: "2px",
}


interface timeProps {
	onFinished: (date: dayjs.Dayjs | dayjs.Dayjs[] | undefined, dateString: string | string[], dateType: string) => void | undefined
}
// 日历形态
const RadioTimePciker = ({ onFinished }: timeProps) => {
	const SubtitleRef = useRef(null);
	const [dateValue, setDateValue] = useState<dayjs.Dayjs | dayjs.Dayjs[] | undefined>(undefined)
	const [left, SetLeft] = useState(0)  //pup偏移量
	// 存放各个时间值 
	const [state, setState] = useSet({
		picker_show: false,
		picker_type: "30day",
		timeString: undefined
	})
	const { picker_type, picker_show, } = state

	useEffect(() => {
		switch (picker_type) {
			case "7day":
				onFinished(dateValue, "7day", picker_type)
				break;
			case "30day":
				onFinished(dateValue, "30day", picker_type)
				break;
			case "week":
				const week = dateValue as dayjs.Dayjs
				onFinished(dateValue, getWeekRange(week), picker_type)
				break;
			case "month":
				const month = dateValue as dayjs.Dayjs
				onFinished(dateValue, getMonthRange(month), picker_type)
				break;
			case "custom":
				const custom = dateValue as dayjs.Dayjs[]
				const dateString = [custom[0].format("YYYY-MM-DD"), custom[1].format("YYYY-MM-DD")]
				onFinished(dateValue, dateString, picker_type)
				break;
			case "date":
				const date = dateValue as dayjs.Dayjs
				onFinished(dateValue, date.format("YYYY-MM-DD"), picker_type)
				break;
		}
		// console.log(dateValue.subtract(7, "day").format('YYYY-MM-DD'));

	}, [dateValue])


	// 日期选择完成
	const
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值