iView DatePicker 日期范围选择怎么限制最大跨度为30天?
我在用 iView 的 DatePicker 做一个日期范围筛选,想限制用户最多只能选30天的区间,但文档里没找到相关配置。试过在 on-change 里判断然后重置值,结果页面卡死或者报错。
下面是我的代码:
const [dateRange, setDateRange] = useState([]);
const handleDateChange = (dates) => {
if (dates && dates.length === 2) {
const diff = Math.floor((dates[1] - dates[0]) / (1000 * 60 * 60 * 24));
if (diff > 30) {
// 这里直接 set 回原值会无限触发 onChange...
return;
}
}
setDateRange(dates);
};
<DatePicker
type="daterange"
value={dateRange}
onChange={handleDateChange}
/>
onChange事件中做判断的同时,避免无限触发。你现在的代码问题主要出在状态更新逻辑上。首先需要在设置初始值时就进行判断,而不是单纯依靠 onChange 回调。另外,在检测到超出范围时,要选择性地更新其中一个值而不是直接返回。
给你一个改进后的版本:
这个方案的关键在于:当检测到超过30天时,只更新结束日期为开始日期加30天,而不是简单地阻止更新。这样可以避免无限循环调用的问题。
顺便说一句,这种需求确实挺常见的,很多项目都遇到过类似问题。希望这能帮到你,别再被卡死了。