vuejs

Vue.js — прогрессивный JavaScript-фреймворк для создания пользовательских интерфейсов. Его разработал Эван Ю (Evan You) и выпустил в 2014 году. Слово «прогрессивный» в описании фреймворка означает, что Vue можно внедрять постепенно — начиная с небольшого интерактивного виджета на существующей HTML-странице и заканчивая полноценным одностраничным приложением. Vue сочетает декларативный шаблонный синтаксис с реактивной системой отслеживания данных.

Ключевые концепции Vue.js

Vue построен вокруг двух идей: декларативного рендеринга и компонентной архитектуры. Декларативный рендеринг означает, что разработчик описывает, как должен выглядеть UI при заданных данных, а Vue сам отслеживает изменения и обновляет DOM. Реактивная система Vue перехватывает обращения к свойствам объектов и автоматически запускает повторный рендеринг при их изменении.

Однофайловые компоненты (SFC)

Однофайловые компоненты (Single File Components, .vue) — фирменный способ организации кода во Vue. Каждый файл содержит три блока:

  • <template> — HTML-разметка с директивами Vue (v-if, v-for, v-bind, v-on).
  • <script> — логика компонента: данные, методы, хуки жизненного цикла.
  • <style> — CSS, опционально с атрибутом scoped для изоляции стилей внутри компонента.

Такая структура держит всё необходимое для компонента в одном файле, что упрощает чтение и поддержку.

Options API и Composition API

Vue предоставляет два стиля написания компонентов. Options API (исторически первый) организует логику компонента через объект с предопределёнными ключами: data, methods, computed, watch, mounted и другие. Он интуитивен для новичков и структурирован.

Composition API, появившийся в Vue 3, позволяет группировать логику по функциональному признаку, а не по типу опции. Вся логика компонента описывается внутри функции setup() (или с синтаксическим сахаром <script setup>) с помощью composable-функций — аналога React-хуков. Это упрощает переиспользование логики и делает TypeScript-интеграцию более естественной.

Реактивная система Vue 3

В Vue 3 реактивность построена на ES6 Proxy. Функции ref() и reactive() создают реактивные объекты:

  • ref(value) — оборачивает примитивное значение в реактивный объект. Доступ к значению через .value.
  • reactive(obj) — делает глубоко реактивным весь объект.
  • computed(fn) — вычисляемое свойство, кэширующее результат до изменения зависимостей.
  • watch / watchEffect — наблюдение за изменениями реактивных данных с выполнением побочных эффектов.

Директивы Vue: управление DOM через разметку

Директивы — специальные атрибуты с префиксом v-, добавляющие реактивное поведение к HTML-элементам:

  • v-bind (сокращение :) — привязка атрибута к выражению.
  • v-on (сокращение @) — обработка событий.
  • v-model — двустороннее связывание данных для форм.
  • v-if / v-else-if / v-else — условный рендеринг.
  • v-for — рендеринг списка элементов.
  • v-show — переключение видимости через CSS display.

Экосистема Vue

Официальная экосистема Vue хорошо интегрирована и охватывает основные потребности разработчика:

  • Vue Router — официальный маршрутизатор с поддержкой вложенных маршрутов, ленивой загрузки и навигационных guard-ов.
  • Pinia — официальное хранилище состояния (заменила Vuex). Поддерживает Composition API, TypeScript и DevTools.
  • Nuxt — метафреймворк для Vue, аналог Next.js для React. Добавляет SSR, SSG, файловую маршрутизацию и серверные API-роуты.
  • Vite — хотя Vite — независимый инструмент, он создавался командой Vue и является стандартным инструментом сборки для Vue 3.
  • VueUse — коллекция composable-функций для работы с браузерными API, сенсорами, анимациями и многим другим.

Vue 3 vs Vue 2: основные отличия

Vue 3, выпущенный в 2020 году, переписан с нуля и принёс Composition API, реактивность на Proxy (быстрее и предсказуемее, чем Object.defineProperty в Vue 2), поддержку нескольких корневых элементов в шаблоне (Fragments), Teleport для рендеринга в произвольный DOM-узел и Suspense. Vue 2 официально прекратил поддержку в начале 2024 года.

Когда выбирать Vue.js

Vue хорошо подходит для команд, ценящих ясный синтаксис шаблонов и мягкий порог входа, для проектов с постепенной миграцией от jQuery или обычного HTML, для азиатских рынков (Vue особенно популярен в Китае — Alibaba, Tencent, Baidu используют его), а также для прототипирования и малых команд. Для крупных корпоративных приложений React и Angular нередко имеют более развитую экосистему UI-компонентов.

Частые вопросы

  • В чём разница между Options API и Composition API?

    Options API организует код компонента через объект с предопределёнными разделами (data, methods, computed). Composition API позволяет группировать связанную логику в composable-функции, что удобнее для сложной бизнес-логики и переиспользования. Оба API поддерживаются в Vue 3, выбор зависит от предпочтений команды.

  • Чем Nuxt отличается от Vue?

    Vue — библиотека для создания UI. Nuxt — метафреймворк поверх Vue, добавляющий серверный рендеринг, статическую генерацию, файловую маршрутизацию, серверные API-маршруты и автоматический импорт компонентов. Отношение Nuxt к Vue примерно такое же, как Next.js к React.

  • Совместим ли Vue 3 с библиотеками для Vue 2?

    Не полностью. Большинство крупных библиотек уже портированы на Vue 3 (Vuetify 3, Element Plus, Quasar), но некоторые старые плагины несовместимы. Для легаси-проектов на Vue 2 выпущена официальная версия с расширенной поддержкой (Vue 2.7 с backport Composition API), однако сам Vue 2 уже вышел из периода поддержки.

Не хватает деталей?

Напишите, что уточнить по теме «vuejs» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться