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

ReactJS集成FullCalendar时事件无法显示问题求助

问题:API获取的日历事件无法在FullCalendar中显示

我是JavaScript和React新手,正在开发一个从API获取事件并展示的小型日历。API数据获取环节正常,但事件无法在页面显示,且控制台无任何报错。

我的页面代码如下:

import {
  IonContent,
  IonHeader,
  IonPage,
  IonTitle,
  IonToolbar,
} from "@ionic/react";
import React, { useState, useEffect } from "react";
import "./Home.css";
import FullCalendar from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";

function convertirFormatDate(dateString: string) {
  const dateTimeParts = dateString.split(" ");
  const dateWithoutTimeZone =
    dateTimeParts[0] + "T" + dateTimeParts[1].split("+")[0];
  return dateWithoutTimeZone;
}

interface Event {
  title: string;
  start: string;
  end: string;
}

interface EventData {
  summary: string;
  start: string;
  end: string;
  description?: string;
  prof?: string;
  location?: string;
  uid?: string;
}

const Home: React.FC = () => {
  const [events, setEvents] = useState<Event[]>([]);

  useEffect(() => {
    fetch("http://myapi/api/planning/getPlanningPerName/sample", {
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
      },
    })
      .then((response) => response.json())
      .then((json) => {
        const events: Event[] = json.map((eventData: EventData) => ({
          title: eventData.summary,
          start: convertirFormatDate(eventData.start),
          end: convertirFormatDate(eventData.end),
        }));

        setEvents(events);
      });
  }, []);

  events.map((event: Event) => {
    console.log(event);
  });
  return (
    <IonPage>
      <IonHeader>
        <IonToolbar>
          <IonTitle>Mycalendar</IonTitle>
        </IonToolbar>
      </IonHeader>
      <IonContent fullscreen>
        <div id="main-content">
          <FullCalendar
            plugins={[dayGridPlugin]}
            initialView="dayGridDay"
            locale="fr"
            titleFormat={{ month: "long", day: "numeric" }}
            events={events}
          />
        </div>
      </IonContent>
    </IonPage>
  );
};

export default Home;

处理后的events变量格式如下:

{
    "title": "my title.",
    "start": "2024-04-10T09:30:00",
    "end": "2024-04-10T11:00:00"
}

解决方案

从以下几个方向排查并修复:

1. 匹配视图与事件日期

当前initialView设为dayGridDay(单日视图),如果事件日期不是日历默认显示的当天,就会看不到事件。先改成月视图测试:

<FullCalendar
  // ...其他属性
  initialView="dayGridMonth"
/>

2. 给FullCalendar设置明确高度

FullCalendar需要足够高度才能渲染,默认高度可能为0导致无法显示。添加高度属性:

<FullCalendar
  // ...其他属性
  height="600px"
/>

3. 优化日期转换逻辑

确认日期格式完全符合FullCalendar的ISO8601要求,可改用new Date()转换替代自定义函数:

start: new Date(eventData.start).toISOString(),
end: new Date(eventData.end).toISOString(),

4. 调整日志位置确认状态更新

将组件顶层的日志移到useEffect中,确保能看到状态更新后的事件:

useEffect(() => {
  console.log("已加载的事件:", events);
}, [events]);

5. 解决样式冲突

IonContent的fullscreen可能遮挡日历,给#main-content添加基础样式:

#main-content {
  padding: 1rem;
  min-height: 100vh;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:18:09