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

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

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

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

Nuxt.js

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

Vuex

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

Q&A

0回答

422閲覧

Vuexのmutationでstoreの値が更新できない

yanbou893

総合スコア7

Firebase

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

Nuxt.js

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

Vuex

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

0グッド

0クリップ

投稿2019/12/19 07:47

現在Nuxtでwebアプリを開発しています。
ログイン機能をfirebase authで実装して、その値をVuexで管理しています。
リロードがかかったタイミングでstoreの値が消えるのでログインのタイミングでlocal storageに保存しています。
ログアウトのタイミングでローカルストレージとstoreの値を更新しています。

このような処理を行おうと思っているのですが、ログアウトのタイミングでstoreの値が更新されません。
mutationの処理が非同期になっているからかと思いましたが違いました。
お力お貸しいただきたいです。

javascript

1/store/user.js 2 3import firebase from '~/plugins/firebase' 4import auth from '~/plugins/auth' 5 6export const state = () => ({ 7 isAuth: false, 8 uid:'', 9 displayName: '', 10 email: '', 11 photoURL: '' 12}) 13export const mutations = { 14 setSignInState(state, user) { 15 state.isAuth = !!user 16 state.uid = user && user.uid || '' 17 state.email = user && user.email || '' 18 state.displayName = user && user.displayName || '' 19 state.photoURL = user && user.photoURL || '' 20 } 21} 22export const actions = { 23 async signIn({ commit }) { 24 await firebase 25 .auth() 26 .signInWithPopup(new firebase.auth.GoogleAuthProvider()) 27 .then(res => commit('setSignInState', res.user)) 28 .catch(error => { 29 if (error.code === 'auth/popup-closed-by-user') { 30 // Do nothing. 31 } else { 32 // any 33 } 34 }) 35 }, 36 signOut({ commit }) { 37 firebase 38 .auth() 39 .signOut() 40 .then(res => { 41 commit('setSignInState', false) 42 }) 43 }, 44 async checkAuth({ commit }) { 45 await auth().then(user => commit('setSignInState', user)) 46 }, 47}

javascript

1/components/Mypage.vue 2<template> 3<div id="mypage"> 4 <span>こんにちは, {{ this.$store.state.user.displayName }}さん</span> 5 <p><button @click="logout">ログアウト</button></p> 6 <h2>あなたのノート</h2> 7 <p>{{ note_content }}</p> 8 <div id='notesIndex' v-for="note in notes" :key="note.content"> 9 <p class="noteContent">{{ note.content }}</p> 10 </div> 11 <p><textarea v-model="note_content"></textarea></p> 12 <p><button @click="saveContent(note_content)">ノートを保存する</button></p> 13 <p><button @click="getdata()">show</button></p> 14</div> 15</template> 16 17<script> 18import firebase from '@/plugins/firebase' 19var db = firebase.firestore(); 20export default { 21 name: 'mypage', 22 props: ['user'], 23 data (context) { 24 // コンポーネントをロードする前に毎回呼び出されます 25 return { note_content: 'hello', notes:[]} 26 }, 27 created: function() { 28 firebase 29 .database() 30 .ref('notes/' + this.user.uid) 31 .once('value') 32 .then(result => { 33 if (result.val()) { 34 this.notes = result.val(); 35 } 36 }) 37 }, 38 methods: { 39 logout: function() { 40 window.localStorage.clear(); 41 firebase.auth().signOut(); 42 }, 43 saveContent: function(value) { 44 45 // 新しいテキストのためのキーを取得 46 db.collection("users").add({ 47 first: value, 48 last: "Lovelace", 49 born: 1815 50}) 51.then(function(docRef) { 52 console.log("Document written with ID: ", docRef.id); 53}) 54.catch(function(error) { 55 console.error("Error adding document: ", error); 56}); 57 }, 58 getdata:function(){ 59 db.collection("users").get().then((querySnapshot) => { 60 querySnapshot.forEach((doc) => { 61 console.log(`${doc.id} => ${doc.data()}`); 62 }); 63}); 64 } 65 } 66} 67</script>
/plugins/localStorage.js import createPersistedState from 'vuex-persistedstate' export default ({ store }) => { createPersistedState({ paths: ['user'], // localStorageに保存したいstoreを入れる })(store); };

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問