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

基于Hackerone React Datepicker实现Decade选择及世纪头部显示求助

Hackerone React Datepicker 实现十年选择与世纪头部显示

一、实现十年(Decade)选择

官方确实没有直接支持十年选择的Props,但可以通过自定义年份项渲染和过滤年份列表来实现:

  1. 过滤年份列表,只保留每10年的起始年份
    用filterYearItem过滤掉非十年起始的年份,比如只保留2000、2010、2020这类年份:
const filterDecadeYears = (year) => {
  return year % 10 === 0;
};
  1. 自定义十年项的显示文本
    通过renderYearItem把单个年份渲染成十年范围的格式,比如把2020渲染成"2020-2029":
const renderDecadeItem = (year) => {
  return `${year}-${year + 9}`;
};
  1. 整合到Datepicker组件
    把这两个函数传入组件,配合yearItemNumber设置足够的年份范围:
<DatePicker
  yearItemNumber={100}
  filterYearItem={filterDecadeYears}
  renderYearItem={renderDecadeItem}
  // 其他必要Props(如selected、onChange等)
/>

如果需要点击十年项后绑定业务逻辑(比如选中整个十年范围),可以在onChange中处理,或是给自定义项添加点击事件时注意用stopPropagation避免组件内部事件冲突。

二、头部显示世纪(无需硬编码)

用renderCustomHeader自定义头部内容,通过日期计算动态获取当前显示年份对应的世纪:

  1. 计算世纪的函数
    根据当前显示的年份计算对应世纪:
const getCentury = (year) => {
  return Math.floor(year / 100) + 1;
};
  1. 自定义头部渲染
    在renderCustomHeader里获取当前视图的年份,计算后渲染世纪,同时保留切换控件:
const renderCustomHeader = ({ date, changeYear }) => {
  const currentYear = date.getFullYear();
  const century = getCentury(currentYear);
  
  return (
    <div className="datepicker-header">
      <span>{century}世纪</span>
      <button onClick={() => changeYear(currentYear - 100)}>上一世纪</button>
      <button onClick={() => changeYear(currentYear + 100)}>下一世纪</button>
    </div>
  );
};
  1. 传入组件
<DatePicker
  renderCustomHeader={renderCustomHeader}
  // 其他必要Props
/>

这样就能动态根据当前显示年份计算并展示世纪,完全不需要硬编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:25:15