ユーザーが小売業者であるかどうかによって異なる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;
感謝を応答のためのような別の名前で自分の変異を設定することもできます。私はVuexツールを見て、コードが2番目の 'else'ブロックに向かうように見えました。私は '=== true'から'!== false'に変更しましたが、今は正常に動作しているようです。 – maxwellgover