Основная проблема в том, что вычисляемые свойства не выполняют глубокое наблюдение, см. Трудно вызвать вычисляемое свойство массива
Этот код
computed: {
...mapState([
'rubriques'
])
}
ссылается народительский rubriques
массив и отслеживает это, но не дочерние свойства childs
.
Когда вы смотрите на консоль, вы можете увидеть маленькое «i» для информации, которая говорит, что значение обновлено «только сейчас»».Это означает, что к тому времени, когда вы смотрите на него, у него уже есть дочерние значения - но это, вероятно, не тот случай, когда запускается commit()
.
Итак, родители добавляются, а ваши дочерние выборки продолжают работать, ноиметь ссылку на своих родителей, поэтому в конечном итоге дети будут правильно добавлены в магазин.
Один из способов справиться с этим - добавить глубокий наблюдатель, который использует $forceUpdate()
для повторного рендеринга DOM
watch: {
rubriques: {
handler: function (after, before) {
this.$forceUpdate()
},
deep: true,
}
}
@ Ответ Эфрата, вероятно, лучше - вы бы эффективно подождали все данные о детях, прежде чем отправлять родителей в магазин.Таким образом, у вас есть только одно обновление DOM (и меньше кода).