2017-01-05 27 views
0

ユーザーが小売業者であるかどうかによって異なるUIを表示しようとしています。私はほぼすべてが正しいと思うが、アプリケーションの初期化時に、ユーザーが小売業者であるかどうかをチェックしたい(これはcheckAuthアクションをディスパッチする)。Vuex状態が更新されない

FirebaseからisRetailerプロパティの値を取得するには、次のコマンドを実行してみてください。

firebase.database().ref('/users/' + user.uid + '/isRetailer').once('value').then(snapshot => snapshot.val() 

次に、結果に基づいていくつかのアクションをディスパッチします。何らかの理由で、ユーザのisRetailerプロパティがtrueの場合でも、私のVuex州の一部であるisRetailerの部分がfalseから更新されていません。

私はなぜそれが推測されているのかはわかりませんが、私のファイヤーベースの参考になるものがあります。私の完全なコードは以下の通りです。ありがとう!

import firebase from 'firebase' 

const authentication = { 
    state: { 
     isAuthed: false, 
     authId: '', 
     isRetailer: false 
    }, 
    mutations: { 
     authUser (state, user) { 
      state.isAuthed = true; 
      state.authId = user.uid; 
     }, 
     notAuthed (state) { 
      state.isAuthed = false; 
      state.authId = ''; 
      state.isRetailer = false 
     }, 
     isRetailer (state) { 
      state.isRetailer = true 
     }, 
     isNotRetailer (state) { 
      state.isRetailer = false 
     } 
    }, 
    actions: { 
     checkUser (context, user) { 

      if (!user.uid) { 

       // Do nothing. 

      } else if (firebase.database().ref('/users/' + user.uid + '/isRetailer').once('value').then(snapshot => snapshot.val()) === true) { 

       context.commit('authUser', user); 

       context.commit('isRetailer'); 

      } else { 

       context.commit('authUser', user); 

       context.commit('isNotRetailer'); 
      }; 
     }, 
     signOut (context) { 
      context.commit('notAuthed') 
     }, 
     setRetailer (context, payload) { 

      // Set retailer info in Firebase. 

      var uid = payload.user.uid; 
      firebase.database().ref('/users/' + uid).set({ 
       name: payload.name, 
       email: payload.email, 
       location: payload.retailerLocation, 
       isRetailer: payload.isRetailer 
      }); 

     }, 
     setNewUser (context, payload) { 

      // Sets a user in firebase w/ a isRetailer value of false. 

      var uid = payload.user.uid; 

      firebase.database().ref('/users/' + uid).set({ 
       name: payload.name, 
       email: payload.email, 
       isRetailer: payload.isRetailer 
      }); 
     } 
    }, 
    getters: {} 
}; 

export default authentication; 

答えて

0

あなたが変異し、状態変数に同じ名前を与えているので、これが起こっされることがあります。isRetailer、私は今、すべての参照を持っていないが、これが引き金ではない突然変異のためのケースであるかもしれない、あなたは一度試してみてください

mutations: { 
    ... 
    ... 
    setIsRetailer (state) { 
     state.isRetailer = true 
    }, 
    isNotRetailer (state) { 
     state.isRetailer = false 
    } 
}, 

とアクションでこれを使用します:

actions: { 
    checkUser (context, user) { 
     ... 
     ... 

      context.commit('authUser', user); 
      context.commit('setIsRetailer'); 

     } 
+0

感謝を応答のためのような別の名前で自分の変異を設定することもできます。私はVuexツールを見て、コードが2番目の 'else'ブロックに向かうように見えました。私は '=== true'から'!== false'に変更しましたが、今は正常に動作しているようです。 – maxwellgover

関連する問題