React中FullCalendar习惯数据转事件及无事件显示问题求助
排查FullCalendar事件不显示问题
1. 先揪出数据转换的核心错误
你大概率踩了字段名不匹配的坑:FullCalendar的事件格式和你自定义的字段名对不上:
- 显示名称的字段是
title,不是你用的name - 每周重复的天数字段是
daysOfWeek(0=周日,1=周一…6=周六),不是daysrepeating start必须是合法日期格式(ISO字符串如YYYY-MM-DD或Date对象)
别用构造函数绕弯,直接用map转换更直观,举个实例:
// 原始习惯数据示例 const rawHabits = [ { name: "每日阅读", selectedDays: [1,2,3,4,5], startDate: "2024-05-01" } ]; // 正确转换为FullCalendar事件格式 const calendarEvents = rawHabits.map(habit => ({ title: habit.name, start: habit.startDate, daysOfWeek: habit.selectedDays, // 可选:添加重复规则,确保重复事件生效 recurrenceRule: `FREQ=WEEKLY;BYDAY=${habit.selectedDays.map(d => ['SU','MO','TU','WE','TH','FR','SA'][d]).join(',')}` }));
2. 检查FullCalendar插件配置
如果用的是v5+版本,必须导入对应插件才能渲染重复事件:
import FullCalendar from '@fullcalendar/react'; import dayGridPlugin from '@fullcalendar/daygrid'; import interactionPlugin from '@fullcalendar/interaction'; // 组件内渲染 <FullCalendar plugins={[dayGridPlugin, interactionPlugin]} events={calendarEvents} initialView="dayGridMonth" />
缺插件的话,就算数据对也加载不出事件。
3. 别乱用JSON.parse
如果转换后的数据是JS对象数组,JSON.parse会直接报错(它只认JSON字符串),反而会破坏数据结构,直接传转换后的数组就行。
4. 调试确认数据正确性
在组件里打印转换后的数组,检查每个对象的字段:
console.log('转换后的事件数据:', calendarEvents);
重点看:title是否存在、start格式是否合法、daysOfWeek是否是0-6的数字数组。
5. 检查日期范围
如果start日期不在当前日历视图的范围内(比如当前看5月,但start是1月),事件也会“隐身”。可以手动滚动日历到对应月份,或者设置initialDate指定视图起始日期:
<FullCalendar // ...其他配置 initialDate="2024-05-01" />
内容的提问来源于stack exchange,提问作者Eric Smith
相关产品推荐
相关产品推荐

