Как получить предыдущее состояние массива в watch?

https://codesandbox.io/s/mystifying-meadow-hnovr?f...

Нужно, чтобы prevItems сохранял предыдущее значение items. Нагуглил конструкцию, которую изобразил в песочнице, но не работает. Я знаю, что могу это сделать в методе, но это мне не подходит, т.к. в реальном примере массив items меняют сразу несколько разных методов и внутри каждого менять значение prevItems кажется плохой идеей.
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
watch: {
  cloneItems(old, cur) {
    this.prevItems = old;
  },

Вот что бывает, когда не читаешь документацию.
Параметры местами перепутаны - сначала новое значение, потом старое.

computed: {
  cloneItems: () => this.items.slice(),

Вот что бывает, когда не знаешь язык.
Контекст внутри cloneItems - это не экземпляр компонента. Заменить стрелочную функцию на обычную.

prev items:
<div v-for="item in items" :key="item">

Вот что бывает, когда бездумно копипастишь .
Заголовок поменяли, а про выводимые данные забыли.

this.items = [...this.items, Date.now()];

Нет необходимости создавать новый массив, достаточно делать push - вызовы мутирующих методов тоже отслеживаются.

Ну а если всё же намерены и дальше перезаписывать массив целиком, то нет необходимости делать копию - можно следить сразу за оригиналом, раз он заменяется целиком.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы