React-Day-Picker DayPicker 组件在单击日历外部时未关闭

问题描述 投票:0回答:1

我在使用

DayPicker
API 来使用弹出日历时遇到问题。当我单击日历外部时,我需要关闭/隐藏。我想像
DayPickerInput
组件一样工作,但是使用我们的文本框输入。我需要弹出日历。使用
onBlur
只能部分起作用,因为如果我单击一周,它不会立即识别日历容器的焦点。我真的很苦恼这个问题,我确信有一个简单的解决方案。

这是代码片段:

    <div className={calendarPopOut} onBlur={handleClickOutside}>
      <DayPicker
         disabledDays={currentCalendarWeek}
         className={dayPicker}
         showOutsideDays
         month={currentSelectedMonth}
         toMonth={currentMonth}
         weekdayElement={<ThreeCharacterAbv />}
         onDayClick={handleChange}
         onBlur={handleClickOutside}
       />
   </div>
reactjs calendar react-day-picker
1个回答
0
投票

您可以创建对日期选择器容器的引用,并在文档单击时创建事件侦听器并关闭日期选择器。

const datePickerRef = useRef<HTMLDivElement | null>(null);

// Add event listener to close the date picker when clicked outside
useEffect(() => {
  const handleClickOutside = (event: MouseEvent) => {
      // Close the date picker only when clicked outside
      if (
        datePickerRef.current &&
        event.target instanceof Node &&
        !datePickerRef.current.contains(event.target)
      ) {
        handleCloseDayPicker();
      }
    };

    document.addEventListener('mousedown', handleClickOutside);
    return () => {
      document.removeEventListener('mousedown', handleClickOutside);
    };
}, [handleCloseDayPicker]);


<div className={calendarPopOut} ref={datePickerRef}>
    <DayPicker
       disabledDays={currentCalendarWeek}
       className={dayPicker}
       showOutsideDays
       month={currentSelectedMonth}
       toMonth={currentMonth}
       weekdayElement={<ThreeCharacterAbv />}
       onDayClick={handleChange}
       onBlur={handleCloseDayPicker}
     />
 </div>

我已经指定了如果您不使用打字稿,您可以删除它们的类型。 希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.