Массив не определен из хранилища Veux

#javascript #vue.js #vuex #undefined

Вопрос:

Я получаю данные из магазина Vuex. Я прежде всего хочу проверить, присутствует ли массив в хранилище Vuex, после этого я хочу проверить, нет ли объекта noProducts с индексом 0.

Причина этого в том, что tweakwiseSortedProducts используется как для продуктов, так и для логического значения «Нет продуктов», на которое нужно реагировать в интерфейсе

 tweakwiseHasProducts () {
  if (this.$store.state.tweakwise?.tweakwiseSortedProducts) {
    return (
      this.$store.state.tweakwise.tweakwiseSortedProducts[0].noProducts ===
      false
    );
  }
  return false;
},
 

Мой интерфейс в настоящее время часто возвращается:

 this.$store.state.tweakwise.tweakwiseSortedProducts[0] is undefined
 

В консоли.

Ответ №1:

Это происходит потому, что tweakwiseSortedProducts не является неопределенным, а представляет собой пустой список. Вы можете попробовать:

 tweakwiseHasProducts () {
  if (this.$store.state.tweakwise?.tweakwiseSortedProducts?.length !== 0) {
    return (
      this.$store.state.tweakwise.tweakwiseSortedProducts[0].noProducts ===
      false
    );
  }
  return false;
},
 

или просто:

 tweakwiseHasProducts () {
  return this.$store.state.tweakwise?.tweakwiseSortedProducts[0]?.noProducts === false;
},
 

который будет ложным, если какой-либо из этих элементов не определен, или истинным, если noProducts действительно ложен

Ответ №2:

Рекомендуется использовать getter при вызове значения в Vuex.
Пожалуйста, обратитесь к следующему.

   getters: {
    getTweakwiseSortedProducts: (state: any) => {
      return state.tweakwise?.tweakwiseSortedProducts || [];
    },
  },
 

 tweakwiseHasProducts () {    
  this.$store.getters.getTweakwiseSortedProducts.length ? true : false;
}