Vue 3 — современный, лёгкий и реактивный фреймворк для построения пользовательских интерфейсов. Его ключевые преимущества — реактивность, компонентный подход и простота интеграции даже в уже существующие проекты.
1. Реактивность в JavaScript
Реактивность — это способность системы автоматически отслеживать и реагировать на изменения данных. В чистом JavaScript можно реализовать простейшую реактивность с помощью Proxy:
const state = { count: 0 };
const reactiveState = new Proxy(state, {
set(target, key, value) {
target[key] = value;
console.log(`Изменено: ${key} → ${value}`);
return true;
}
});
reactiveState.count++; // Лог: Изменено: count → 1
Однако ручное обновление интерфейса при изменении данных быстро становится сложным. Именно здесь на помощь приходит Vue.
2. Реактивность во Vue 3
В Vue 3 реактивность реализована на основе Proxy — но с гораздо большей мощностью. Достаточно создать реактивный объект с помощью reactive() и описать реакцию с помощью effect():
import { reactive, effect } from 'vue';
const state = reactive({ count: 0 });
effect(() => {
console.log(`Count: ${state.count}`);
});
state.count++; // Автоматически вызовет effect()
Функция reactive() делает объект наблюдаемым, а effect() отслеживает его изменения и запускается при каждом обновлении. Именно это лежит в основе реактивного ядра Vue 3 и делает интерфейс "живым" без дополнительного кода.
3. Виртуальный DOM
Когда данные изменяются, Vue должен обновить HTML-структуру страницы. Делать это напрямую дорого с точки зрения производительности, особенно при большом количестве компонентов.
Чтобы избежать избыточных обновлений, Vue 3 использует виртуальный DOM — лёгкое, абстрактное представление реального дерева элементов.
Принцип работы прост:
Vue создаёт виртуальную копию DOM в памяти.
При изменении данных создаётся новое виртуальное дерево.
Vue сравнивает старую и новую версии (процесс называется diffing).
В реальный DOM вносятся только те изменения, которые действительно необходимы.
Это делает обновления интерфейса максимально эффективными — браузер перерисовывает только то, что изменилось, а не весь компонент.
💡 Виртуальный DOM — как черновик для интерфейса: Vue сначала проверяет, что изменилось на бумаге, а потом аккуратно обновляет страницу.
4. Single File Components (SFC)
Vue-компоненты удобно оформляются в Single File Components (SFC) — .vue-файлы, которые объединяют разметку, логику и стили в одном месте:
<template>
<button @click="increment">{{ count }}</button>
</template>
<script setup>
import { ref } from 'vue';
const count = ref(0);
const increment = () => count.value++;
</script>
<style scoped>
button { padding: 6px 12px; }
</style>
SFC повышают читаемость и обеспечивают изоляцию логики и стилей, что особенно важно при масштабировании проекта.
5. Options API и Composition API
Vue 3 поддерживает два стиля описания логики компонента:
Options API — классический способ:
export default {
data() {
return { count: 0 };
},
methods: {
increment() {
this.count++;
}
}
}
Composition API — современный подход:
import { ref } from 'vue';
export default {
setup() {
const count = ref(0);
const increment = () => count.value++;
return { count, increment };
}
}
Composition API делает код более гибким и модульным: можно удобно группировать логику по смыслу, а не по типу свойства.
6. Пример компонента Vue 3
<template>
<div>
<h2>{{ message }}</h2>
<button @click="toggle">Показать / Скрыть</button>
<p v-if="visible">Vue 3 делает реактивность простой!</p>
</div>
</template>
<script setup>
import { ref } from 'vue';
const message = 'Пример компонента Vue 3';
const visible = ref(true);
const toggle = () => (visible.value = !visible.value);
</script>
<style scoped>
button { margin-top: 10px; }
</style>
Vue3.ru