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

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

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

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

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Cloud Firestore

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1471閲覧

firestoreの値が重複してしまう

F_Yohei

総合スコア14

Vue.js

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

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Cloud Firestore

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/02/28 02:53

前提・実現したいこと

Firestoreを使いVue.jsで簡略な投げ銭アプリの開発をしています。

新規登録時に各ユーザーに以下の情報を持たせてFirestoreのドキュメントに保存するものとしています。

・自身のuid
・ユーザーネーム
・メールアドレス
・自身の残高

発生している問題

例えば、ユーザーAとユーザーBというユーザーがいます。

ユーザーAにwallet:500というデータを持たせ新規登録

画面に残高500円と表示される

ログアウト

ユーザーBにwallet:300というデータを持たせ新規登録

画面に残高500円と表示される

このようにエディタで登録時のwalletの値を変えて新規登録しても前の残高が表示されてしまいます。

今、自分で確認できていることは以下のふたつです。

① 一度リロードした後、ログアウトをしwalletの値を変更して新規登録をした時は変更した値が表示される
② ①の手順を行わずにコンソールとFirestoreのドキュメントを確認したところ、どちらも前のユーザーのwallet残高が登録されている。

該当のソースコード

↓SignUp.js

vue

1methods: { 2 async signUp() { 3 await this.$store.dispatch('signUp', { username:this.username, email:this.email, password:this.password }); 4 const user = await firebase.auth().currentUser; 5 const db = await firebase.firestore(); 6 await db.collection('myData').doc(user.uid).set({ 7 uid: user.uid, 8 userName: user.displayName, 9 email: user.email, 10 myWallet: 700 11 }); 12 await this.$store.dispatch('getMyWallet', user.uid); 13 this.$router.push('/home'); 14 } 15 }

↓store.js

javascript

1state() { 2 myWallet: '' 3}, 4getters: { 5 getMyWallet: state => state.myWallet.myWallet 6} 7mutations: { 8 getMyWallet(state, doc) { 9 state.myWallet = doc.data(); 10 console.log(doc.data()) 11 } 12}, 13actions: { 14//新規登録時の関数 15 async signUp({ commit }, userInfomation) { 16 try { 17 await firebase 18 .auth() 19 .createUserWithEmailAndPassword( 20 userInfomation.email, 21 userInfomation.password 22 ); 23 const user = firebase.auth().currentUser; 24 await user.updateProfile({ 25 displayName: userInfomation.username, 26 }); 27 await commit('setUserName', user); 28 } catch (e) { 29 alert(e.message); 30 } 31 }, 32//現在ログインしてるユーザーの残高を取得する関数 33 async getMyWallet({ commit }, uid) { 34 const db = firebase.firestore(); 35 const doc = await db 36 .collection('myData') 37 .doc(uid) 38 .get(); 39 commit('getMyWallet', doc); 40 } 41}

新規登録後に画面遷移するページでもdispatchでgetMyWalletを呼び出しています。
↓Home.vue

vue

1 // リロードしても残高が消えないようにする処理 2 created() { 3 this.getMyWallet(); 4 }, 5 methods: { 6 async getMyWallet() { 7 const user = await firebase.auth().currentUser; 8 this.$store.dispatch('getMyWallet', user.uid); 9 } 10 }

関係ありそうな部分だけコードを抜き出してみました????‍♂️
原因がわからず前に進めない状況ですので、お力添えいただければ幸いです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問