> Как реализована реактивность во Vue 2 и Vue 3 и в чем их отличия (Vue.js)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: MTS, 1221 Systems
Стек: Vue.js
> Пример ответа
В Vue 2 реактивность реализована через Object.defineProperty(). При инициализации компонента Vue рекурсивно обходит все свойства объекта data и переопределяет их геттеры/сеттеры. Каждое свойство получает свой экземпляр Dep (зависимость), который собирает подписчиков (Watcher'ов) при чтении и уведомляет их при записи. Недостатки: не отслеживает добавление новых свойств (нужен Vue.set()), удаление свойств, а также изменения по индексу массива (нужен splice).
В Vue 3 используется Proxy из ES6. Прокси оборачивает весь объект целиком, перехватывая операции чтения, записи, удаления, проверки наличия ключа (in) и даже итерации. Это позволяет:
-
Отслеживать добавление и удаление свойств без специальных методов.
-
Работать с массивами по индексу и с
lengthнапрямую. -
Лениво инициализировать вложенные объекты (реактивность создается только при обращении).
Основные отличия:
-
Механизм:
Object.defineProperty(Vue 2) vsProxy(Vue 3). -
Отслеживание изменений: Vue 2 требует
Vue.set/Vue.deleteдля новых/удаленных ключей; Vue 3 обрабатывает их автоматически. -
Массивы: Vue 2 переопределяет мутирующие методы (
push,popи т.д.), но не ловит прямое присвоение по индексу; Vue 3 ловит любые операции. -
Производительность: Vue 3 быстрее при инициализации, так как не нужно рекурсивно обходить все свойства сразу - прокси создает ловушки по требованию.
-
Совместимость: Vue 2 работает в IE11 (с полифиллами), Vue 3 не поддерживает IE11 из-за Proxy.
Также в Vue 3 появилась Composition API, которая использует ref() и reactive() - обертки над Proxy, дающие более гибкое управление реактивностью.
> Похожие задачи по frontend
Что такое ViewModel во Vue и как он работает
Почему выбрали Vue и учитывали ли преимущества инструментов
Что такое Composition API во Vue и в чем разница с Options API
В чем разница shallowRef и ref во Vue
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью