【无标题】

该博客介绍了如何使用Ant Design的DatePicker组件来创建一个时间选择功能,包括今天、昨天、最近7天和最近30天的选择。通过定义items数组设置不同时间段,并利用onMouseEnter和onClick事件处理选中和显示时间范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间选择记录

import { DatePicker } from "antd";
import React, { useRef, useState } from "react";
import moment from "moment";
let todayMoment = moment();

const items = [
  {
    start: 0,
    end: 0,
    label: "今天",
    unit: "days",
  },
  {
    start: -1,
    end: -1,
    label: "昨天",
    unit: "days",
  },
  {
    start: -7,
    end: 0,
    label: "最近7天",
    unit: "days",
  },
  {
    start: -30,
    end: 0,
    label: "最近30天",
    unit: "days",
  },
];

function AntdPicker() {
  const [open, setOpen] = useState(false);
  const [initialValue, setInitialValue] = useState(null);
  const selectIndex = useRef(null);
  const onMouseEnter = (item: any) => {
    if (selectIndex.current == null) {
      const start = todayMoment.clone().add(item.start, item.unit);
      const end = todayMoment.clone().add(item.end, item.unit);
      setInitialValue([start, end]);
    }
  };
  const onMouseLeave = () => {
    if (selectIndex.current == null) {
      setInitialValue(null);
    }
  };
  const onClick = (item: any, index: number) => {
    onMouseEnter(item);
    selectIndex.current = index;
    setOpen(false)
  };
  return (
    <DatePicker.RangePicker
      open={open}
      value={initialValue}
      onOpenChange={(v) => {
        setOpen(v)
        if (v) {
          todayMoment = moment();
          selectIndex.current = null;
        }
      }}
      panelRender={(re) => (
        <div>
          <div style={{ display: "flex", alignItems: "center" }}>
            <div>
              <ul>
                {items.map((item, index) => (
                  <li
                    key={index}
                    onMouseEnter={() => onMouseEnter(item)}
                    onMouseLeave={onMouseLeave}
                    onClick={() => onClick(item, index)}
                  >
                    {item.label}
                  </li>
                ))}
              </ul>
            </div>
            {re}
          </div>
        </div>
      )}
    />
  );
}

export default AntdPicker;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值