Firestoreからイベントのドキュメントを取得し、FullCalender(React)でイベントを表示したい
Reactの環境でFullCalenderとFirestoreで、カレンダーアプリを作成しているのですが、Firestoreに存在するイベントのドキュメントを取得しカレンダーに表示することができず、困っています。
どのように解決すればいいか教えていただけませんでしょうか。
何卒よろしくお願い致します。
React
1import React, {useState,useEffect} from 'react'; 2import firebase from "./firebase/Firebase"; 3import FullCalendar from "@fullcalendar/react"; 4 5 6const App = () =>{ 7const [myEvents, setMyEvents] = useState([ //イベントを表示するために連想配列をstateに格納 8{ 9 id: 0, 10 title: "0 は、firestore内でソートすると最後になるので初期設定とする", 11 start: "2021-09-22 10:00:00", 12 end: "2021-09-22 15:00:00", 13}, 14]) // イベントを格納するstate 15useEffect(() => { // firestoreのコレクション"schedule"からid順にドキュメントを取得し追加 16 firebase 17 .firestore() 18 .collection("events") 19 .orderBy("id") 20 .get() 21 .then((query) => { 22 query.forEach((doc) => { 23 myEvents.push(doc.data()); 24 }); 25 console.log(myEvents); 26 }) 27 .catch((error)=>{ 28 console.log(`データの取得に失敗しました (${error})`); 29 }); 30 },[]); 31 32return ( 33 <FullCalendar 34 locale="ja" 35 events={myEvents} //カレンダーで表示するイベント 36 /> 37 38); 39} 40export default App; 41 42 43 44
Firestore
1events //コレクション 2│ 3├ abcd //ドキュメントID 4│ ├ id: 1 (数字) 5│ ├ title: test1 (文字列) 6│ ├ start: 2021年9月15日 0:00:00 UTC+9 (タイムスタンプ) 7│ └ end: 2021年9月16日 0:00:00 UTC+9 (タイムスタンプ) 8│ 9└ efgh //ドキュメントID 10 ├ id: 2 (数字) 11 ├ title: test2 (文字列) 12 ├ start: 2021年9月22日 0:00:00 UTC+9 (タイムスタンプ) 13 └ end: 2021年9月23日 0:00:00 UTC+9 (タイムスタンプ) 14
console.log(myEvents)
で計3つの連想配列がmyEvent
に格納されていることはコンソールで確認しました。
しかし、FullCalenderの方ではmyEvent
を読み取っておらず表示できていません。
試したこと
試したことは、
- Firestoreに格納されているデータの型が上手く読み取れていないのかと思い、文字列として日時を格納したがダメだった。
myEvent
をカレンダーが読み取る際にidが必要のようで、idの順に取得するように.orderBy("id")
を使い、idが配列の順番と一致するようにした。
いずれも解決には繋がりませんでした。
補足情報(FW/ツールのバージョンなど)
react初心者です。1、2ヶ月前からreactを触っていますが、純粋なJavaScriptは未経験です。すみません。
version
1├── @firebase/firestore@3.0.1 2├── @fullcalendar/core@5.9.0 3├── react@17.0.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。