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

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

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

Q&A

解決済

1回答

1981閲覧

firebaseにデータが入らない(React×firebaseの簡単なTODOサイトを作成中)

scythercas

総合スコア1

0グッド

1クリップ

投稿2023/02/15 05:48

実現したいこと

タイトルと内容を入力して投稿ボタンを押した際に、FirestoreのDatabaseにデータが入るようにしたいです。

前提

https://qiita.com/Naoya_pro/items/a42f1ecae8acce249ef3

こちらの記事を見て、React×firebaseの簡単なTODOサイトを作成しているところです。

発生している問題・エラーメッセージ

FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore

該当のソースコード

NewPosts.jsx

1import React from "react"; 2import { useState } from "react"; 3import { collection, addDoc } from "firebase/firestore"; 4import db from "./firebase"; 5 6const NewPost = () => { 7 const [title, setTitle] = useState(""); 8 const [content, setContent] = useState(""); 9 10 const onSubmit = async (e) => { 11 e.preventDefault(); 12 try { 13 await addDoc(collection(db, "posts"), { 14 title: title, 15 content: content, 16 created_at: new Date().getTime() 17 }); 18 setTitle(""); 19 setContent(""); 20 } catch (error) { 21 console.log(error); 22 } 23 }; 24 25 return ( 26 <> 27 <p>新規投稿</p> 28 <form onSubmit={onSubmit}> 29 <input 30 value={title} 31 type="text" 32 placeholder="タイトル" 33 onChange={(e) => setTitle(e.target.value)} 34 /> 35 <input 36 value={content} 37 type="text" 38 placeholder="内容" 39 onChange={(e) => setContent(e.target.value)} 40 /> 41 <button type="submit">投稿</button> 42 </form> 43 </> 44 ); 45}; 46 47export default NewPost;

投稿ボタンが押されたらonSubmit関数が呼び出され、addDoc関数によりfirestoreにデータが入るような仕組みです。
しかしcatchに引っ掛かり、error文が出力されます。

試したこと

firestoreのCloud Databaseにコレクションを予め追加してみたが、特に変わらず。
より簡単なデータをデータベースに挿入するコンポーネントを作成し、テストしようとしたがそもそも作れず。

補足情報(FW/ツールのバージョンなど)

Cloud Firestoreのルール設定はこうなっております。

rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } }

わかる方いたら教えていただけると幸いです。

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

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

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

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

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

ams2020

2023/02/15 09:08

エラーから見るに、collection()の最初の引数"db" が原因のようです。 firebase.js ファイルで db はきちんと定義されておりますでしょうか??
scythercas

2023/02/15 09:31

仰る通りでした... ご回答ありがとうございます!!!
ams2020

2023/02/15 09:45

よかったです! 他にも同じ悩みを抱えている方いると思いますので、自己解決として回答を投稿しておくといいかもです!
guest

回答1

0

自己解決

エラー文をよく読むと

FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore

collection関数の最初の引数がCollectionReferenceDocumentReferenceFirebaseFirestoreである必要があります。
とありました。
collection関数に引数として渡している変数dbの宣言が無く、適切に記述したら問題なく動きました。
@ams2020 さん、ご回答ありがとうございました!

投稿2023/02/15 23:58

scythercas

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問