Жизненный цикл компонентов с данными топора ios - PullRequest
0 голосов
/ 13 января 2020

В приложении, над которым я работаю, есть компонент, загружающий данные и хранящий их в магазине. Для этого я реализовал созданную функцию и вычисленную функцию следующим образом:

computed: {
  initiatives: function () {
    return this.$store.state.initiatives.initiatives
  }
},
created () {
  this.$store.dispatch('initiatives/getInitiatives')
}

Это позволяет иметь переменную инициатив, доступную из компонента. Чтобы определить конкретную c инициативу, у меня есть переменная, подобная этой:

data: function () {
  return {
    cinitiative: {}
}

Я хочу инициализировать cinitiative переменную случайным объектом из загруженных объектов, хранящихся в this.initiatives. Когда я делаю это в созданной функции:

created () {
  this.$store.dispatch('initiatives/getInitiatives')
  let iindex = Math.floor(Math.random() * Math.floor(this.initiatives.length))
  this.cinitiative = this.initiatives[iindex]
}

У меня появляется эта ошибка:

TypeError: "this.cinitiative is undefined"

И у меня возникает такая же ошибка, когда я пытаюсь сделать то же самое из смонтированной функции. Где мне это сделать?

1 Ответ

0 голосов
/ 13 января 2020

Поскольку created перехват выполняется только один раз, а initiatives/getInitiatives зависит от Обещания, вы должны ждать для этого, например:

async created () {
  await this.$store.dispatch('initiatives/getInitiatives')
  let iindex = Math.floor(Math.random() * Math.floor(this.initiatives.length))
  this.cinitiative = this.initiatives[iindex]
}

Но на самом деле передовой опыт - это превращение cinitiative в вычисляемое свойство, которое реагирует на initiatives:

computed: {
  initiatives: function () {
    return this.$store.state.initiatives.initiatives
  },
  cinitiative: function () {
    let iindex = Math.floor(Math.random() * Math.floor(this.initiatives.length))

    return this.initiatives[iindex]
  },
},
...