@Virtus_pro
PHP программист

Vue.js кеширует данные при рендере списка v-for?

На странице выводится список вот таким образом, у него просто есть кол-во и кнопки прибавить и убавить в корзину
так же есть кнопки навигации, которые меняют список продуктов в корзине и этот список загружается по ajax и просто заменяется в переменной и vue рендерит его заного
<div v-for="item in products">
      {{item.name}}
    <template  v-if="item.count==0">
     <button>Добавить в корзину</button>
 </template>
 <template v-else>
     <button @click="item.count--">-</button> {{item.count}} <button @click="item.count++">+</button>
 </template>
</div>


Все работает прекрасно, за одним но, когда вызывается новый список продуктов, Vue рендерит этот список продуктов и отображается новое название его в item.name, а вот item.count перестает быть реактивным и сохраняет значение предыдущего продукта. Хотя смотрю в Dev tools Vue, там значение меняется корректно, а вот рендер в DOM не работает
  • Вопрос задан
  • 218 просмотров
Решения вопроса 1
@grinat
Вуе не кэширует, он строит виртуальный дом, сравнивает его с предыдущим состоянием и если есть изменения то перестраивает уже реальный. В твоем случае скорее всего из-за того что нет ключей, диф ломается и вуе решает что нет изменений, либо же count объявляешь как-то криво и он не становится реактивным. Добавь ключи и с ajax присваивай значения products как: this.products = Object.assign({}, ajaxProducts) это должно присвоить вуевские реактивные геттеры/сеттеры всем свойствам объекта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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