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

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

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

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

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Cloud Firestore

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

React.js

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

Q&A

解決済

1回答

904閲覧

Firestoreから単一Documentを取得したい

ug_o

総合スコア39

Firebase

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

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Cloud Firestore

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

React.js

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

0グッド

0クリップ

投稿2020/08/20 06:57

編集2020/08/27 13:10

実現したいこと

Firestoreから単一Documentを取得したいのですが、うまくいきません。
userDocがundefinedになります。
記述方法が間違っているのでしょうか。
よろしくお願いいたします。

該当のソースコード

JS

1async componentDidMount() { 2 // TODO: Firestoreからユーザ情報を取得 3 try { 4 const db = firebase.firestore(); 5 const user = getCurrentUser(); 6 const userDoc = await db.collection("users").doc(user.uid).get(); 7 console.log(userDoc.data()); 8 this.setState({ 9 name: userDoc.data.name, 10 profileImageUrl: userDoc.data.image, 11 }); 12 } catch (error) { 13 console.error(error); 14 } 15 }

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

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

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

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

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

nekoniki

2020/08/27 11:39

うまくいかない、の詳細が分からないとなんともいえません。 何らかのエラーが出ているのか、userDocがundefiendになっているということですか?
ug_o

2020/08/27 13:09

情報が足りず申し訳ございません。 userDocがundefinedになっています。
nekoniki

2020/08/27 13:32

だとすれば書き方は間違っていないと思うので、user.uidに該当するドキュメントがないのだと思います。 一度下記のループを回してみて、user.uidに該当するユーザがないか確認してみてはどうでしょう? db.collection("user").get().then((docs) => { if (docs.exists) { docs.fotEach(doc => { console.log(doc.data()); }) } })
ug_o

2020/08/28 01:00

ありがとうございます。 上記で確認したところ、おっしゃる通り該当ユーザーがいない(ログインしているか)が取得できていませんでした。 ログインしているかを判定するコード記述順序を変更したところ、うまく取得できました! ご教授ありがとうございました。
guest

回答1

0

ベストアンサー

既に解決とのことなのであくまで補足ですが、

javascript

1this.setState({ 2 name: userDoc.data.name, 3 profileImageUrl: userDoc.data.image, 4});

userDocundefiend対策で下記のようにするとなお良いと思います。

javascript

1this.setState({ 2 // それぞれuserDocがundefiendだとエラーになるので、その場合は空文字でsetStateする 3 name: userDoc?.data?.name || '', 4 profileImageUrl: userDoc?.data?.image || '', 5});

投稿2020/08/28 01:09

nekoniki

総合スコア2411

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

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

ug_o

2020/08/28 01:13

なるほど、いただいた記述試してみます! この度はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問