質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1507閲覧

Firestoreからイベントのドキュメントを取得し、FullCalender(React)でイベントを表示したい

kgoa

総合スコア4

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/09/02 11:12

編集2021/09/04 11:29

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 //コレクション 23├ 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 (タイムスタンプ) 89└ 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

反映できなかった理由は、データベースのタイムスタンプ型とFullCalenderのDate型による相違で読み込むことができなかったようです。
そこでデータをFirestoreから取得する際にデータの形を.toDate()を使って編集してから格納することでなんとか解決しました。
本当は.pushを使わずにmapを使いたいのでどなたかご存知であれば、ここに回答して頂けると幸いです。

react

1firebase.firestore().collection("schedule") 2 .get().then((query) => { 3 query.forEach((doc) => { 4 var data = doc.data(); 5 myEvents.push( 6 { 7 id: data.id, 8 title: data.title, 9 start: data.start.toDate(), 10 end: data.end.toDate(), 11 } 12 ); 13 }); 14          });

投稿2021/09/04 11:42

編集2021/09/04 11:44
kgoa

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問