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

如何在react-date-range的endDate更新后将showDate设为false?

解决方案

当然可以实现这个需求——当endDate被设置新值后自动将showDate设为false,只需修改DateRange组件的onChange回调逻辑即可:

修改后的代码示例

import { useState } from 'react';
import { DateRange } from 'react-date-range';
import 'react-date-range/dist/styles.css';
import 'react-date-range/dist/theme/default.css';

function YourComponent() {
  const [showDate, setShowDate] = useState(false);
  const [date, setDate] = useState([
    {
      startDate: new Date(),
      endDate: new Date(),
      key: 'selection',
    }
  ]);

  return (
    <div>
      {/* 示例:点击按钮切换日期选择器显示状态 */}
      <button onClick={() => setShowDate(!showDate)}>选择日期范围</button>
      
      {showDate && (
        <DateRange
          editableDateInputs={true}
          onChange={(item) => {
            // 先更新日期范围状态
            setDate([item.selection]);
            // 判断endDate是否被设置为新值,是则关闭选择器
            const newEndDate = item.selection.endDate;
            const oldEndDate = date[0].endDate;
            if (newEndDate && newEndDate.getTime() !== oldEndDate.getTime()) {
              setShowDate(false);
            }
          }}
          moveRangeOnFirstSelection={true}
          ranges={date}
          showDateDisplay={false}
        />
      )}
    </div>
  );
}

逻辑说明

  • 在onChange回调中先更新date状态,保存新选择的日期范围
  • 通过时间戳对比新旧endDate:如果新的endDate存在且与旧值不同,说明用户刚完成结束日期的设置,此时调用setShowDate(false)关闭日期选择器
  • 若只需在完整选择日期范围(同时存在有效startDate和endDate)时关闭,可简化判断条件为if (item.selection.startDate && item.selection.endDate)

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:56:05