react-big-calendar月视图:为'+{total} more'文本添加日期Tooltip
解决react-big-calendar月视图"+{total} more" hover显示当日所有事件的问题
核心思路
通过自定义react-big-calendar月视图的more组件,直接获取组件传入的date属性定位当日事件,结合Tooltip组件实现hover展示所有事件的需求。
具体实现步骤
- 自定义"更多"组件
利用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> ); };
- 在日历组件中配置自定义组件
将自定义的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.
相关产品推荐
相关产品推荐

