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

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

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

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

Firebase

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

1回答

1378閲覧

Vuexを使用した非同期処理の順番を制御したい

kaiji0811

総合スコア7

Vue.js

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

Firebase

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

1クリップ

投稿2020/04/27 14:53

前提・実現したいこと

学習のためにFirebaseとNuxtを使用して、
簡単なアプリケーションを作成しています。

アプリケーションの構成は以下の通りです。

/middleware |-- authentication.js /pages |-- list.vue /store |-- auth.js

list.vueのmountedでstateの値を使用したAPI通信を行いたく、
middleware -> action(Firebaseにデータを保存) -> mutationでstateに保存 -> list.vueのmounted()でstateを利用
と実行の順番を同期的に行いたいのですが、
上記を行う方法はありますでしょうか。

ご教授いただけると助かります。
宜しくお願いいたします。

該当のソースコード

middleware/authentication.js

javascript

1import firebase from 'firebase' 2export default function ({ store, redirect }) { 3 firebase.auth().onAuthStateChanged((user) => { 4 if (!user) { 5 redirect('/') 6 } else { 7 store.dispatch('auth/saveUserInfo', { 8 uid: user.uid, 9 name: user.displayName, 10 email: user.email, 11 phoneNumber: user.phoneNumber ? user.phoneNumber : '', 12 photoURL: user.photoURL, 13 isLogin: true 14 }) 15 } 16 }) 17} 18

store/auth.js

javascript

1import { DB } from '@/plugins/firebase' 2export const state = () => ({ 3 uid: '', 4 name: '', 5 email: '', 6 phoneNumber: '', 7 photoURL: '', 8 isLogin: false 9}) 10 11export const actions = { 12 saveUserInfo ({ commit }, payload) { 13 DB 14 .ref(`users/${payload.uid}`) 15 .set({ 16 uid: payload.uid, 17 name: payload.name, 18 email: payload.email, 19 phoneNumber: payload.phoneNumber, 20 photoURL: payload.photoURL 21 }, 22 (error) => { 23 if (!error) { 24 commit('SAVE_USER_INFO', payload) 25 } 26 }) 27 } 28} 29 30export const mutations = { 31 SAVE_USER_INFO (state, payload) { 32 state.uid = payload.uid 33 state.name = payload.name 34 state.email = payload.email 35 state.phoneNumber = payload.phoneNumber 36 state.photoURL = payload.photoURL 37 state.isLogin = payload.isLogin 38 } 39} 40

pages/list.vue

vue

1<script> 2import { mapState } from 'vuex' 3import { DB } from '@/plugins/firebase' 4 5export default { 6 middleware: 'authentication', 7 data() { 8 return { 9 articles: {} 10 } 11 }, 12 computed: { 13 ...mapState('auth', { 14 uid: 'uid' 15 }) 16 }, 17 mounted() { 18 DB.ref(`articles/${this.uid}/`) 19 .once('value') 20 .then(snapshot => { 21 this.articles = snapshot.val() 22 }) 23 } 24} 25</script>

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

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

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

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

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

guest

回答1

0

取り急ぎはwatchでuidの値に変更があったときにDB接続するようにしました。

ただやり方がスマートではないですね・・・

javascript

1<script> 2import { mapState } from 'vuex' 3import { DB } from '@/plugins/firebase' 4 5export default { 6 middleware: 'authentication', 7 data() { 8 return { 9 articles: {} 10 } 11 }, 12 computed: { 13 ...mapState('auth', { 14 uid: 'uid' 15 }) 16 }, 17 mounted() { 18 if (this.uid) { 19 this.getMyArticles() 20 } 21 }, 22 watch: { 23 uid (newUid) { 24 if (newUid) { 25 this.getMyArticles() 26 } 27 } 28 }, 29 methods: { 30 getMyArticles () { 31 DB.ref(`articles/${this.uid}/`) 32 .once('value') 33 .then(snapshot => { 34 this.articles = snapshot.val() 35 }) 36 } 37 } 38} 39</script>

投稿2020/05/02 19:12

kaiji0811

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問