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

React从对象数组取值更新useState适配FullCalendar出现异常

FullCalendar 事件转换错误修复

问题场景

我用FullCalendar搭建简易日历,需要把appointment数组中的service(服务名)和date(日期)提取出来,转换成FullCalendar要求的事件格式,存入useState定义的events状态里,供组件的events属性使用。

示例数据:

const appointment = [
  { service: "Grooming", date: "2022-11-23", name: "Josh" },
  { service: "Vaccine", date: "2022-11-22", name: "Aaron" }
];

错误实现及问题

我之前的代码写法导致控制台出现4个未识别对象:

const [events, setEvents] = useState([]);
useEffect(() => {
  setEvents(prev =>[ ...prev, {start: appointment.date, title: appointment.service} ])
  console.log(events)
}, []);

FullCalendar组件配置:

<div className="App">
  <FullCalendar 
    ref={calendarRef} 
    plugins={[dayGridPlugin]}
    initialView="dayGridMonth"
    events={events}
  />
</div>

错误原因

  • 数组访问错误:appointment是数组,直接访问appointment.date/appointment.service会返回undefined,生成无效的事件对象
  • 未遍历数组:没有循环处理数组中的每个项,而是试图直接把数组当作单个对象转换,导致错误的对象被添加
  • 异步状态打印问题:console.log(events)是同步执行,此时events还没完成更新,无法看到正确结果

修复代码

正确的做法是遍历appointment数组,逐个转换为FullCalendar支持的事件格式:

const [events, setEvents] = useState([]);

// 转换并更新事件
useEffect(() => {
  const convertedEvents = appointment.map(item => ({
    start: item.date, // FullCalendar需要的日期字段
    title: item.service // FullCalendar需要的标题字段
  }));
  setEvents(convertedEvents);
}, [appointment]); // 依赖appointment,数组变化时自动重新转换

// 查看更新后的事件(可选)
useEffect(() => {
  console.log("更新后的events:", events);
}, [events]);

FullCalendar的组件配置保持不变即可,修复后组件能正确识别所有事件,不会再出现未识别对象的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:10:42