Как я могу убедиться, что мои еще не доставленные данные не сломают мой сайт? - PullRequest
0 голосов
/ 07 июня 2019

Я сейчас создаю кнопку «Мне нравится» на компоненте моей карты в vue.Я извлекаю данные из firebase, используя промежуточное программное обеспечение на странице для отправки действия vuex, которое пойдет и получит информацию о моем пользователе, в которой liked_posts хранится в массиве.

Возникает проблема, что, когда я загружаю страницу, требующую некоторых данных, например likes_posts, и мое состояние пустое, выдается ошибка "undefined" .

Как я могу убедиться, что даже если пользователь не выполнил вход или никогда не посещал, что мои данные пользователя не вызовут ошибку

Я попытался изменить свое действие вVuex хранилище должно быть асинхронным и использовать await, чтобы я удостоверился, что данные были там, но это не помогло.
То, что происходит, - приведенный ниже код в вычисляемых свойствах пытается получить доступ к объекту, который не 'в массиве еще не существует.

likedOrNot() {
              const likeInfo = this.$store.state.userInfoSub[0].liked_posts
              return likeInfo.includes(this.$store.state.loadedCards[0].id)
              }

Этих данных еще нет, поскольку пользователь не вошел в систему, существует и т. д.как только они это сделают, а промежуточное ПО отправляет действие для извлечения пользовательских данных, userInfoSub будет заполнен информацией.

мое базовое состояние выглядит так, когда пользователь не выполнил вход или промежуточное ПО не запустило поискпользователь, который получает файлы cookie.

Поэтому мне нужно убедиться, что отсутствие userInfoSub не нарушает свойства моего компьютера

loadedCards:Array[1]
0:Object
token:null
user:null
userInfoSub:Array[0]
username:null

1 Ответ

0 голосов
/ 07 июня 2019

Вот ответ самоуверенный: используйте get из lodash .

npm i lodash

Тогда вы можете написать что-то вроде этого:

import get from 'lodash/get';

export default {
  computed: {
    isLiked() {
      const cardId = get(this.$store, 'state.loadedCards[0].id');
      const postIds = get(this.$store, 'state.userInfoSub[0].liked_posts', []);
      return postIds.includes(cardId);
    },
  },
};
...