Что такое Vue и его философия

Знакомимся с Vue: какую задачу он решает, что значит «прогрессивный фреймворк» и почему декларативность экономит вам нервы и баги.

Vue — это фреймворк для построения пользовательских интерфейсов, в котором вы описываете каким должен быть UI при текущем состоянии данных, а синхронизацией с реальным DOM занимается сам Vue.

Боль ручного DOM

Вспомните, как обновляется страница на чистом JavaScript: вы находите элемент через document.querySelector и вручную меняете его textContent или innerHTML. Состояние (данные) и отображение (DOM) живут отдельно, и связывать их приходится руками.

let count = 0;
const screen = { text: "" };          // имитация элемента на странице
function render() {
  screen.text = "Счёт: " + count;     // вручную синхронизируем «DOM»
}
function increment() {
  count = count + 1;
  render();                            // не забыть вызвать!
}
increment();
increment();
console.log(screen.text);

Вывод:

Счёт: 2

Если забыть вызвать render() — на экране окажутся устаревшие данные. Чем больше полей, тем больше таких ручных синхронизаций и тем выше шанс ошибиться. Это классический источник багов в «ванильных» приложениях.

Декларативный подход Vue

Vue переворачивает задачу. Вы не пишете «найди элемент и поменяй текст». Вы один раз описываете связь: «здесь показывается значение count». Когда count меняется — Vue сам обновляет нужное место на экране. Это и есть реактивность: данные и интерфейс связаны автоматически.

<template>
  <button @click="count++">Счёт: {{ count }}</button>
</template>

<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>

Здесь нет querySelector и textContent. Есть только описание: «кнопка показывает count, по клику увеличивает его». Vue гарантирует, что число на экране всегда соответствует значению count. Вы декларируете результат, а не пошаговый рецепт его достижения.

Почему «прогрессивный фреймворк»

Vue называют прогрессивным, потому что его можно внедрять постепенно. Можно подключить одним <script>-тегом и «оживить» один блок на старой странице. А можно собрать полноценное одностраничное приложение (SPA) с маршрутизацией, хранилищем состояния и сборкой через Vite. Вы берёте ровно столько фреймворка, сколько нужно проекту.

Три идеи, на которых стоит Vue

ИдеяЧто она даёт
ДекларативностьВы описываете желаемый вид интерфейса, а не шаги по его изменению
РеактивностьМеняются данные — интерфейс сам перерисовывается, без ручного DOM
КомпонентыUI собирается из переиспользуемых кирпичиков со своим шаблоном, логикой и стилями

Императивно против декларативно

Аналогия: императивный код — это маршрут «иди прямо, поверни налево, через 200 метров направо». Декларативный — это адрес «улица Ленина, 5». Если перекрыли улицу, маршрут ломается и его надо переписывать вручную. А по адресу навигатор сам построит путь заново. Vue — навигатор для вашего интерфейса.

Итог

  • Ручной DOM требует вручную синхронизировать данные и экран — отсюда баги.
  • Vue декларативен: вы описываете UI как функцию от данных, синхронизацию берёт на себя фреймворк.
  • «Прогрессивный» — внедряется постепенно: от одного блока до полноценного SPA.
  • Три кита: декларативность, реактивность, компоненты.
Проверьте себя
1. Что в первую очередь решает Vue по сравнению с ручным управлением DOM?
AУскоряет загрузку картинок на странице
BАвтоматически синхронизирует данные и интерфейс, избавляя от ручного обновления DOM
CЗаменяет сервер и базу данных
DКомпилирует JavaScript в машинный код
2. Почему Vue называют «прогрессивным» фреймворком?
AОн работает только в новых браузерах
BЕго можно внедрять постепенно: от одного блока на странице до полноценного SPA
CОн постоянно меняет синтаксис от версии к версии
DОн автоматически улучшает SEO без настройки
3. Что значит «декларативный» подход к интерфейсу?
AВы пишете пошаговые инструкции по изменению DOM
BВы описываете, каким должен быть UI при текущем состоянии, а синхронизацию делает фреймворк
CВы объявляете все переменные в начале файла
DВы пишете только на TypeScript
Поддержать проект