Back to questions
Middle
5
Как работает реактивность во Vue 3? В чём отличие от Vue 2 (Proxy vs Object.defineProperty)?
Companies where asked
RedLab
Answer from AI
sobes.tech AI
Во Vue 3 реактивность реализована с помощью Proxy, в отличие от Vue 2, где использовался Object.defineProperty.
Отличия:
- Proxy позволяет перехватывать операции с объектом целиком, включая добавление и удаление свойств, что невозможно с Object.defineProperty.
- Благодаря Proxy реактивность стала более полной и производительной.
- Vue 3 может отслеживать изменения в массивах и объектах без необходимости обхода всех свойств при инициализации.
Пример использования Proxy для реактивности:
const state = new Proxy({ count: 0 }, {
get(target, prop) {
console.log(`Читаем свойство ${prop}`);
return target[prop];
},
set(target, prop, value) {
console.log(`Устанавливаем ${prop} = ${value}`);
target[prop] = value;
// здесь можно уведомить подписчиков
return true;
}
});
state.count = 1; // Устанавливаем count = 1
console.log(state.count); // Читаем свойство count
В Vue 2 реактивность создавалась через Object.defineProperty для каждого свойства, что ограничивало динамическое добавление новых свойств и усложняло отслеживание изменений.