Как правильно структурировать свое хранилище vuex?

Есть хранилище на vuex. Как мне избавиться от этого спагетти?
state: {
    data: {
      city: {
        name: null
      },
      list: [
        {
          deg: null,
          dt: null,
          humidity: null,
          pressure: null,
          speed: null,
          temp: {
            day: null,
            eve: null,
            max: null,
            min: null
          },
          weather: [
            {
              description: null,
              icon: null
            }
          ]
        },
        {
          deg: null,
          dt: null,
          humidity: null,
          pressure: null,
          speed: null,
          temp: {
            day: null,
            eve: null,
            max: null,
            min: null
          },
          weather: [
            {
              description: null,
              icon: null
            }
          ]
        },
        {
          deg: null,
          dt: null,
          humidity: null,
          pressure: null,
          speed: null,
          temp: {
            day: null,
            eve: null,
            max: null,
            min: null
          },
          weather: [
            {
              description: null,
              icon: null
            }
          ]
        },
        {
          deg: null,
          dt: null,
          humidity: null,
          pressure: null,
          speed: null,
          temp: {
            day: null,
            eve: null,
            max: null,
            min: null
          },
          weather: [
            {
              description: null,
              icon: null
            }
          ]
        },
        {
          deg: null,
          dt: null,
          humidity: null,
          pressure: null,
          speed: null,
          temp: {
            day: null,
            eve: null,
            max: null,
            min: null
          },
          weather: [
            {
              description: null,
              icon: null
            }
          ]
        }
      ]
    }
  },


Если я сделаю просто data:null, a потом постараюсь туда записать response от ajax, в этом случае когда я захочу получить значение поля data.city.name то выведется ошибка "can't read property name of undefined"
ajax запрос происходит во время хука created
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 2
lavezzi1
@lavezzi1
Нужно добавить еще поле boolean, например isReady: false. В экшене когда дату сохранили в стор ставите isReady: true, на самой странице делаете computed:
{ isDataReady() { return this.$store.state.isReady ;}


В размете делаете v-if, v-else. сначала спиннер крутите потом дату показываете.
Ответ написан
kleinmaximus
@kleinmaximus
Senior Full-stack Javascript Developer
Вполне можно присвоить null в state.data, просто потом нужно проверять наличие нужных Вам полей в state, например:
$store.state.data && $store.state.data.city ? $store.state.data.city.name : null

или отслеживать ошибку
let cityName;
try {
  cityName = this.$store.state.data.city.name;
} catch (e) {
  cityName = null;
}

Вариантов, на самом деле, масса. Все зависит от контекста Вашей задачи и архитектуры приложения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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