2017-07-25 18 views
0

私のNuxtアプリ用ミドルウェアをいくつか構築しました。Nuxt.jsミドルウェアでログオンしているユーザを確認してください

import api from '~/api/Api.js' 

export default function ({router, store}) { 
    return api.auth().onAuthStateChanged(function (user) { 
    store.state.user = user 
    if (user) { 

    } else { 

    } 
    }) 
} 

ここで、実際にユーザーオブジェクトにアクセスするにはどうすればよいですか。私は通常のコンポーネントからこれをやっているとき、正しく動作しています。単純な文字列を格納するために渡すこともできますが、他のアクションはありません。何らかの約束が必要ですか?ヘルプThx。

+0

私はあなたではなくコミット/変異を使用するよりも、直接店舗の状態にアクセスしようとしていることに気づきました。これがこの問題の一部かどうかは疑問です。 – richter

+0

ちょうど私がこれは単なる例であると言ったように、私はここに単純な文字列を渡しているときに動作します。 – Lukas

答えて

2

Vuexドキュメントから:

実際Vuexストアの状態を変更する唯一の方法は、 突然変異をコミットしています。 Vuex突然変異はイベントと非常によく似ています。 にはそれぞれ突然変異があり、文字列型とハンドラがあります。私たちは実際の状態の変更を行う どこハンドラ関数は、突然変異をコミットすることで、反応性の要素が更新されるように(Documentation link

変異はまた、直接送信することにより、状態を操作のに対し、Vueの中DOMの更新をトリガ です文字列はリアクティブ更新を引き起こしません。 Vuexのドキュメントから:我々は状態を変異させたときに

Vuexストアの状態はVueのことで反応作られているので、状態を観察しVueのコンポーネントは、変異フォローヴューの反応性」と題し自動的

セクションを更新しますルール "には詳細なランダウンがあります。

ここでの注意点は、突然変異は同期データに対してのみ機能することです。 非同期データがある場合は、Vuexのアクションが助けになります - 突然変異を実行し、非同期イベントを処理できます。

他のサンプルコードがない場合、ここで他の問題があるかどうかを判断するのは難しいですが、この正確なシナリオで動作するサンプルストアファイルが含まれています。 nuxt固有のものではないが、原理は同じである:

あなたのモジュールで次に
// store.js 

import Vue from 'vue' 
import Vuex from 'vuex' 

Vue.use(Vuex) 

const state = { 
    user: {}, 
    files: [], 
    token: '' 
} 

const mutations = { 
    logOut (state) { 
    state.user = null 
    }, 
    setUser (state, user) { 
    state.user = user 
    }, 
    setToken (state, token) { 
    state.token = token 
    } 
} 

const actions = { 
    logOut: ({ commit }) => commit('logOut'), 
    setUser: ({ commit }, user) => commit('setUser', user), 
    setToken: ({ commit }, token) => commit('setToken', token) 
} 

const getters = { 
    user: state => state.user, 
    token: state => state.token, 
    files: state => state.files 
} 

export default new Vuex.Store({ 
    state, 
    getters, 
    actions, 
    mutations 
}) 

import store from '@/store' 
import { mapGetters } from 'vuex' 

api.auth().onAuthStateChanged(function (user) { 
    store.dispatch('setUser', user) // .dispatch triggers ACTION, handling async evt 
    if (user) { 

    } else { 

    } 
}) 


export default { 
    // mapGetters maps getters allowing this.user in script, or {{ user }} in template 
    computed: mapGetters([ 
    'user', 
    'files' 
    ]) 
} 
+0

doodあなたは私が書いたものを読むことさえしましたか? – Lukas

+0

@ Lukas。私はあなたが書いたものを読んだので、私はVuex突然変異に関するより多くの情報を投稿したのです。あなたが答えを理解しようとしていないように見えますが、私はそれがダウンボートの理由ではないと感じます。文字列を直接ステートに渡すことはできますが、突然変異を使わずにオブジェクトを渡すと、リアクション要素は更新されません。そのため、ストアデータが更新されていないと思いますあなたの他のコンポーネントで。 – richter

関連する問題