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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

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

Cloud Firestore

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

Q&A

解決済

1回答

1034閲覧

【Vue x Firestore】投稿ボタンを押下されたらリアルタイムで画面上に投稿が反映されるようにしたい。

TMTN

総合スコア53

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

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

Cloud Firestore

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

0グッド

0クリップ

投稿2021/05/26 07:27

編集2021/06/01 23:28

#投稿ボタンを押下されたらリアルタイムで画面上に投稿が反映されるようにしたい。

Firestoreにてデータ管理していますが、投稿ボタンを押下されたらリアルタイムで画面上に投稿が反映されるようにしたく、
this.$router.go({ path: /board/${this.uid}, force: true });を使って投稿されたらページをリロードするようにしているのですが、リロード後投稿が反映されない状況です・・

this.$router.go({ path: /board/${this.uid}, force: true });を削除して、挙動を確認すると投稿は確認できます。
投稿後にリロードしているのに反映されず、リロードのコードを削除して手動でリロードさせると反映されるのがわからず困っています。。

postItem() { const currentUser = firebase.auth().currentUser; this.uid = currentUser.uid; const id = firebase .firestore() .collection("posts") .doc().id; //変数「id」に入れて、コレクションの"posts"を参照して、「id」を取得 this.$swal({ title: "内容確認", text: "この内容で投稿しますか?", icon: "info", buttons: true, dangerMode: true, }).then((willDelete) => { if (willDelete) { firebase .firestore() .collection("posts") .add({ title: this.title, description: this.description, genre: this.genre, time: firebase.firestore.FieldValue.serverTimestamp(), //サーバ側で値設定 id: id, //dataにデータを作ってないので、thisは付けなくてOK! uid: this.$route.params.uid, }); this.$swal("投稿しました。", { icon: "success", }); this.$router.go({ path: `/board/${this.uid}`, force: true }); //router.go(path:"/ ~ ")まで戻す。 } else { this.$swal("キャンセルしました。"); } }); },

#試した事

this.$router.push({ path: `/board/${this.uid}`, force: true });

上記では下記のようなエラーが出てしまいました。

イメージ説明

おそらくthis.$router.goとして、ブラウザのもどるボタンを押した時のように、
前のキャッシュを参照して表示してしまうため、登録された情報が反映されないのかと考えています。

そもそも投稿した時に、投稿情報をコンポーネントに渡してあげて、そのコンポーネントだけ再renderすれば良いと調べてわかった事なのですが、記述方法がわからず行き詰まっております。

分かる方いらっしゃいましたらお力添えをいただきたいです。

よろしくおねがい致します。

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

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

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

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

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

guest

回答1

0

自己解決

以下のコードのようにしたら解決致しました。

Firestoreに保存される前にリロードが動いていたことが原因でした。

postItem() { const currentUser = firebase.auth().currentUser; this.uid = currentUser.uid; const id = firebase .firestore() .collection("posts") .doc().id; //.doc().firebaseでコレクションの"posts"を参照して、「id」を取得 this.$swal({ title: "内容確認", text: "この内容で投稿しますか?", icon: "info", buttons: true, dangerMode: true, }) .then((willDelete) => { if (willDelete) { firebase .firestore() .collection("posts") .add({ title: this.title, description: this.description, genre: this.genre, time: firebase.firestore.FieldValue.serverTimestamp(), id: id, uid: this.$route.params.uid, }) .then(() => { this.$swal("投稿しました。", { icon: "success", }); this.$router.go({ path: `/board/${this.uid}`, force: true }); }) .catch(() => { console.log("err"); }); } else { this.$swal("キャンセルしました。"); } }) .catch(() => { this.$swal("投稿出来ませんでした。", { icon: "error", }); }); },

投稿2021/06/03 11:56

TMTN

総合スコア53

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問