@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. Спиннер, пока данные не получены.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы