@E-em

Как убрать скачки стейта в vue приложении?

Всем привет :)

экшн
checkAuthStatus ({ commit }) {
    firebase.auth().onAuthStateChanged(user => {
      if (user) {
        commit('checkAuthStatus', {
          status: true,
          user
        })
      } else {
        commit('checkAuthStatus', {status: false})
      }
    })
  }


и мутейшн
checkAuthStatus (state, data) {
    state.user.name = data.user.displayName
    state.user.email = data.user.email
    state.authenticated = data.status
  }


при mounted диспатчу экшн в компоненте и делаю проверку authenticated, если залогинен то убираю кнопку входа и засовываю туда имя юзера, но при рефреше страницы проскакивает кнопка входа, как это убрать?
  • Вопрос задан
  • 345 просмотров
Пригласить эксперта
Ответы на вопрос 2
@wearemieta
BEWARE HIPSTERS
1. Компонент срендерился
2. Экшн отправил данные к API Firebase.
3. ...............
4. Залогинен!

Вы не учли, что в пункте 3 данные ходят по сети не нулевое время. Они ходят, а вы видите кнопку.
Добавьте проверку state в компоненте и не показывайте кнопку пока там не будет данных.

<template v-if="authenticated">
   <кнопка />
</template>
export default {
   computed: {
      authenticated: return this.$store.getters.authenticated
   }
}


Как-то так. Можно еще спиннер какой-нибудь показывать в <template v-else>
Ответ написан
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
Варианты:

1. authenticated сделать null по умолчанию, v-if="authenticated !== null" на блок, который отвечает за отображение кнопки логина или ссылки на пользователя.

2. Спиннер, пока данные не получены.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы