1. Основы Vue: реактивность, шаблоны и директивы
Основы Vue: реактивность, шаблоны и директивы
Vue.js — это прогрессивный фреймворк для создания пользовательских интерфейсов. Его ключевая идея: вы описываете состояние (данные) и то, как интерфейс зависит от этого состояния, а Vue берёт на себя синхронизацию изменений данных с отображением.
В этой статье мы разберём базу, без которой дальше в Vue двигаться сложно:
Официальная документация (рекомендуется держать открытой параллельно):
Как Vue «оживляет» интерфейс
Если очень упрощать, Vue делает следующее:
!Схема цикла: состояние → отображение → действия пользователя → новое состояние
Реактивность во Vue
Что такое реактивность
Реактивность — это механизм, при котором изменения данных автоматически приводят к обновлению того, что от них зависит.
В Vue 3 реактивность построена вокруг объектов Proxy (вам не нужно писать Proxy вручную), а в коде вы обычно пользуетесь двумя основными инструментами:
ref() для примитивов и единичных значенийreactive() для объектов (структурированных данных)Справочник API:
ref()
ref() создаёт реактивную «коробку» со значением. В JavaScript-коде значение лежит в поле .value.
Что важно запомнить:
ref подходит для чисел, строк, булевых значений, а также для случаев, когда вам удобнее работать с единым значением.valueref автоматически, поэтому там .value чаще всего не пишутreactive()
reactive() делает реактивным объект (включая вложенные поля).
Что важно запомнить:
reactive удобно для состояния «как в модели»: один объект со многими полямиrefПроизводные значения: computed()
Если вам нужно значение, которое вычисляется из других реактивных данных, используйте computed().
Почему это лучше, чем «просто функция»:
Реакция на изменения: watch()
watch() нужен, когда вы хотите выполнить побочный эффект в ответ на изменение данных: например, запрос к API, запись в localStorage, логирование.
Правило на практике:
computed — для получения значенияwatch — для запуска действийШаблоны Vue: что можно писать внутри
Шаблон (template) — это декларативное описание интерфейса: как данные превращаются в отображение.
Документация: Template Syntax
Интерполяция
Самая базовая форма — вывести значение в текст:
{{ message }}Внутри фигурных скобок вы пишете JavaScript-выражение (не инструкцию), например:
{{ user.name }}{{ isAdmin ? 'Админ' : 'Пользователь' }}Практические ограничения (важно):
computed или методы, чтобы шаблон оставался читаемымПривязка атрибутов и свойств
Чтобы связать значение с атрибутом, используется v-bind.
v-bind:href="url":href="url"v-bind работает не только со строками: можно связывать числа, булевы значения, объекты для классов и стилей.
Обработка событий
Чтобы реагировать на события пользователя, используется v-on.
v-on:click="increment"@click="increment"Документация: Event Handling
Директивы: управление DOM через декларативные правила
Директива — это специальная конструкция вида v-..., которая говорит Vue, как применить данные к DOM.
Полный список: Built-in Directives
Ниже — самые важные.
v-if, v-else-if, v-else и v-show
Эти директивы отвечают за условное отображение.
Документация:
Отличие по смыслу:
v-if физически добавляет или убирает элемент из DOMv-show оставляет элемент в DOM, но переключает видимость (обычно через CSS)Как выбирать:
v-if — когда условие меняется редко или создание элемента дорогоv-show — когда нужно часто показывать и скрывать одно и то жеv-for и ключи key
v-for нужен для вывода списков.
Документация: List Rendering
Типичная форма:
v-for="item in items"Почти всегда вместе с v-for задают :key:
:key="item.id"Зачем нужен key:
Практическое правило:
id)v-model: двусторонняя связь ввода и состояния
v-model связывает значение поля ввода с реактивным состоянием и автоматически обрабатывает ввод пользователя.
Документация: Form Input Bindings
Идея такая:
По сути v-model — это удобная комбинация :value="..." и @input="..." (для текстовых полей), но с нюансами для разных типов полей.
Минимальный пример на Vue без шаблонов (через render)
Иногда полезно увидеть, что Vue можно описывать и через render() — это помогает понять, что шаблоны являются удобной надстройкой.
Что здесь важно в контексте темы:
count — реактивное состояние (ref)doubled — производное значение (computed)Типичные ошибки новичков
watch, когда достаточно computedkey в v-for и потом долго ловить «странные баги»Что дальше по курсу
Дальше логично углубиться в следующие темы: