@codharma

Почему вотчер не возвращает старое значение?

Согласно документации, при использовании watch есть возможность получить старое, предыдуще значение данных. Но у меня оба значения одинаковые. В чем суть? https://codepen.io/dubx/pen/zjVQNv

watch: {
    array: function (o, n) {
      this.oldData = o
      this.newData = n
    }
  }
  • Вопрос задан
  • 165 просмотров
Решения вопроса 2
lavezzi1
@lavezzi1
Офф. документация говорит:

Note: when mutating (rather than replacing) an Object or an Array, the old value will be the same as new value because they reference the same Object/Array. Vue doesn’t keep a copy of the pre-mutate value.
Ответ написан
0xD34F
@0xD34F Куратор тега Vue.js
Добавление элементов в массив (удаление, изменение), как и аналогичные действия над объектами - они не приводят к созданию нового массива/объекта. Так что всё правильно - старые и новые значения одинаковы.

Чтобы иметь доступ к предыдущему значению, надо создавать новый массив. Т.е., например, сейчас у вас есть this.array.push('hello'). Вместо этого делайте this.array = [ ...this.array, 'hello' ].

Аналогично и с объектами - вместо какого-нибудь this.obj.prop = value будет this.obj = { ...this.obj, prop: value }.

UPD.

watch: {
    array: function (o, n) {
      this.oldData = o
      this.newData = n
    }
  }

У вас тут старое и новое значение местами перепутаны.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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