Почему Vue не будет перерисовывать каждое переназначение объекта

«Почему Vue не будет перерисовывать каждое переназначение объекта» — вопрос из категории Vue, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Vue использует реактивность на основе прокси (в Vue 3) или геттеров/сеттеров (Vue 2). При прямом переназначении объекта (obj = newObj) теряется реактивность, так как ссылка на объект меняется. Vue отслеживает только изменения свойств существующего реактивного объекта.

Для реактивного обновления:

  1. В Vue 3 используй reactive() или ref()
  2. В Vue 2 используй Vue.set() или this.$set()

Пример:

// Vue 3
const state = reactive({ count: 0 })
// Реактивно:
state.count = 1 
// НЕ реактивно:
state = { count: 1 }

// Vue 2
this.$set(this.obj, 'key', value)