You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目中Shadcn Date Picker Range的实现与报错解决

解决“DateRange not found in react-day-picker”错误的完整日期范围选择器实现

错误原因

react-day-picker v8+ 版本中,DateRange 类型已不再直接从主模块导出,类型定义的位置和命名做了调整。

完整解决方案

1. 确认依赖安装

确保已安装所有必要依赖(未安装则执行以下命令):

npm install react-day-picker date-fns
npx shadcn-ui@latest add calendar popover button

2. 修正后的完整组件代码

替换你原有的组件代码为以下内容:

import { CalendarIcon } from "@radix-ui/react-icons"
import { addDays, format } from "date-fns"
import type { Range } from "react-day-picker"

import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"
import { Calendar } from "@/components/ui/calendar"
import {
  Popover,
  PopoverContent,
  PopoverTrigger,
} from "@/components/ui/popover"

export function DatePickerWithRange({
  className,
}: React.HTMLAttributes<HTMLDivElement>) {
  const [date, setDate] = React.useState<Range | undefined>({
    from: new Date(2022, 0, 20),
    to: addDays(new Date(2022, 0, 20), 20),
  })

  return (
    <div className={cn("grid gap-2", className)}>
      <Popover>
        <PopoverTrigger asChild>
          <Button
            id="date"
            variant={"outline"}
            className={cn(
              "w-[300px] justify-start text-left font-normal",
              !date && "text-muted-foreground"
            )}
          >
            <CalendarIcon className="mr-2 h-4 w-4" />
            {date?.from ? (
              date.to ? (
                <>
                  {format(date.from, "LLL dd, y")} -{" "}
                  {format(date.to, "LLL dd, y")}
                </>
              ) : (
                format(date.from, "LLL dd, y")
              )
            ) : (
              <span>Pick a date</span>
            )}
          </Button>
        </PopoverTrigger>
        <PopoverContent className="w-auto p-0" align="start">
          <Calendar
            initialFocus
            mode="range"
            defaultMonth={date?.from}
            selected={date}
            onSelect={setDate}
            numberOfMonths={2}
          />
        </PopoverContent>
      </Popover>
    </div>
  )
}

3. 关键修改说明

  • 移除错误的DateRange导入,替换为react-day-picker v8+内置的Range类型,该类型对应{ from: Date; to: Date } | undefined结构
  • 若不想导入Range类型,也可直接将状态类型定义为{ from: Date; to: Date } | undefined,效果完全一致

4. 组件使用示例

在页面或父组件中引入并使用:

import { DatePickerWithRange } from "@/components/ui/date-picker-range"

export default function HomePage() {
  return (
    <div className="p-8">
      <h1 className="text-2xl font-bold mb-6">日期范围选择器示例</h1>
      <DatePickerWithRange />
    </div>
  )
}

内容的提问来源于stack exchange,提问作者Amit kumar Prajapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:32:08