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

react-big-calendar月视图:为'+{total} more'文本添加日期Tooltip

解决react-big-calendar月视图"+{total} more" hover显示当日所有事件的问题

核心思路

通过自定义react-big-calendar月视图的more组件,直接获取组件传入的date属性定位当日事件,结合Tooltip组件实现hover展示所有事件的需求。

具体实现步骤

  1. 自定义"更多"组件
    利用react-big-calendar的自定义组件能力,替换默认的"+{total} more"元素,同时接收组件传入的date、events等参数:
// 示例使用Material-UI的Tooltip,可替换为项目中使用的Tooltip组件
import { Tooltip } from '@mui/material';
import { format } from 'date-fns';

const CustomMore = ({ date, events, total }) => {
  // 过滤出当日的所有事件
  const dayEvents = events.filter(event => 
    format(event.start, 'yyyy-MM-dd') === format(date, 'yyyy-MM-dd')
  );

  return (
    <Tooltip
      title={
        <div style={{ padding: '8px', minWidth: '200px' }}>
          <p style={{ margin: '0 0 8px', fontWeight: 'bold' }}>
            {format(date, 'yyyy年MM月dd日')} 事件列表
          </p>
          <ul style={{ margin: 0, paddingLeft: '20px' }}>
            {dayEvents.map(event => (
              <li key={event.id} style={{ margin: '4px 0' }}>
                {event.title}
              </li>
            ))}
          </ul>
        </div>
      }
      placement="top"
    >
      <span style={{ cursor: 'pointer', color: '#1890ff', textDecoration: 'underline' }}>
        +{total} more
      </span>
    </Tooltip>
  );
};
  1. 在日历组件中配置自定义组件
    将自定义的CustomMore组件传入日历的components属性,指定月视图的more组件:
import { Calendar, Views } from 'react-big-calendar';
import 'react-big-calendar/lib/css/react-big-calendar.css';

// 你的事件数据
const events = [
  // 示例事件结构:{ id: 1, title: '会议', start: new Date(2024, 4, 15), end: new Date(2024, 4, 15) }
];

export default function MyCalendar() {
  return (
    <Calendar
      events={events}
      defaultView={Views.MONTH}
      views={[Views.MONTH]} // 仅启用月视图
      components={{
        month: {
          more: CustomMore // 绑定自定义的"更多"组件
        }
      }}
      // 其他日历配置(如本地化、事件样式等)
    />
  );
}

关键说明

  • 自定义more组件会自动接收date参数,这就是当前hover的日期,无需额外处理日期识别
  • 事件过滤逻辑可根据业务调整,比如支持跨天事件的判断,只需修改filter中的日期对比规则
  • 若不需要第三方Tooltip组件,也可以自己实现简单悬浮层:通过onMouseOver/onMouseOut控制悬浮层显示隐藏,结合date渲染当日事件

内容的提问来源于stack exchange,提问作者Shubham A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:25