antd에서 RangePicker 구성 요소를 사용할 때 "이 호출과 일치하는 과부하 없음" 오류가 발생하면 어떻게 해야 합니까?

원인 분석

실제로 유형이 일치하지 않고 이러한 유형을 임의로 다시 작성할 수 있기 때문에 주로 ts 문법 메커니즘에 문제가 있는 경우가 많습니다.
공식 홈페이지에 따르면 어떨 때는 오류 없이 사용할 수 있는데, 어떨 때는 어떨 때는 잘 안되는 이유는 무엇일까요? 프로젝트에서 사용하는 버전이 다르기 때문입니다.
해결 방법? 아래를 봐주세요:

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. 수정된 코드

가장 중요한 것은 정의할 때 type을 any로 변경하는 것이고, 메소드에서 매개변수 current: Dayjs type도 current: any로 변경됩니다.
시작 시간과 종료 시간에 대해 상태를 정의하고 입력하면 모든 오류가 해결됩니다.

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>
  );

Guess you like

Origin blog.csdn.net/qq_37967853/article/details/128659865