Обновление props из дочернего компонента. Vue.js

Есть цикл, который обходит все элементы из массива в vuex. Выводит компонент с props: <card :city="city">.
В данном компоненте я вызываю метод update(), который делает запрос к API и в ответ я получаю данные, как эти данные использовать внутри компонента <card>, если начальное значение (props) уже передано ? Пробую через emit, но не работает, хотя ивент отрабатывает как надо

Page:

</template>
  <transition-group name="fade-translate" tag="div" class="grid">
    <Card :city="city" v-for="city in cities" :key="city.id" @update="update(city, $event)"/>
  </transition-group>
</template>

<script>
  methods: {
    update (city, event) {
      city = event
    },
  },
  computed: {
    ...mapGetters(['cities', 'error'])
  },
</script>

Component:

<template>
  ....
  <div class="control">
    <button
      type="button"
      class="button is-text is-small has-text-link"
      @click="update(city)"
    >Update</button>
  </div>
  ....
</template>

<script>
export default {
  props: ['city'],
  methods: {
    async update (city) {
      const { data } = await $api.get('/weather', {
        params: {
          id: city.id,
          units: 'metric',
          appid: API_KEY
        }
      })
      this.$emit('update', data)
    }
  }
}
</script>

Ответы (1 шт):

Автор решения: bonusrk

Варианты есть :)

  • "адовый брутфорс" - по эмиту перезапрашивать весь список. (Удобный, дорогой, тяжёлый вариант. А вес -это надёжность). "
  • "пусть никто потом концов не найдет" - копировать пропсы в стейт на маунте потомков, и по апдейту не эмитить а обновлять Стейт.
  • "зачем я это делаю" - вынести запрос в родителя, эмитить из потомка, передавая айди/индекс элемента, и потом по получению результата весело его апдейтить в вуэксе, перебирая этот список в поисках по индексу/айди :)
  • "не зря вуэкс завезли" - вместо эмита диспатчить/комитить экшен/мутацию в стор, где опять менять элемент
→ Ссылка