> Что такое Composition API во Vue и в чем разница с Options API (Vue.js)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: Библио-Глобус, 1221 Systems
Стек: Vue.js
> Пример ответа
Короткий ответ
Composition API - это набор функций (setup, ref, reactive, computed, watch и другие), позволяющий организовывать логику компонента по функциональному признаку, а не по опциям. В отличие от Options API, где код делится на data, methods, computed, в Composition API логика группируется в хуке setup, что упрощает переиспользование и поддержку сложных компонентов.
Подробное объяснение
Options API - классический подход во Vue 2 и Vue 3, где компонент определяется объектом с секциями data, methods, computed, watch, lifecycle hooks. Логика одного функционального блока (например, работа с формой) размазывается по разным опциям, что усложняет чтение и рефакторинг при росте компонента.
Composition API появился во Vue 3 как альтернатива. Вся логика компонента пишется внутри функции setup, которая выполняется до создания компонента. Основные строительные блоки:
- ref и reactive - для реактивных данных
- computed - для вычисляемых свойств
- watch - для отслеживания изменений
- onMounted, onUnmounted и другие - lifecycle hooks
Ключевые отличия:
- Организация кода: в Options API логика разделена по типу (данные, методы), в Composition API - по функциональности
- Переиспользование: Composition API легко выносить в отдельные функции (composables), Options API требует миксинов с проблемами конфликтов имён
- TypeScript: Composition API лучше интегрируется с TypeScript, так как работает с обычными функциями и переменными
- Производительность: Composition API позволяет более точно контролировать реактивность и tree-shaking
На практике
Для junior-разработчика важно понимать, что Composition API не отменяет Options API - оба подхода поддерживаются во Vue 3. В простых компонентах (до 50 строк) Options API может быть понятнее. Composition API оправдан в:
- Компонентах с несколькими независимыми функциональными блоками
- Сценариях, где нужна переиспользуемая логика между компонентами
- Проектах на TypeScript
- Крупных компонентах, где сложно отследить связи между data и methods
На собеседовании покажите, что понимаете trade-off: Composition API даёт гибкость, но требует дисциплины в организации кода (без неё может получиться "спагетти").
Пример кода
<template> <div> <p>Счётчик: {{ count }}</p> <button @click="increment">+1</button> </div> </template> <script> // Options API export default { data() { return { count: 0 } }, methods: { increment() { this.count++ } } } </script> <script setup> // Composition API (синтаксис setup) import { ref } from 'vue' const count = ref(0) function increment() { count.value++ } </script>
Как отвечать на собеседовании
Начните с определения: "Composition API - это функциональный подход к организации логики компонента через setup". Затем перечислите 2-3 ключевых отличия от Options API. Приведите простой пример, когда Composition API удобнее (например, работа с формой или подписка на события). Упомяните, что оба подхода можно комбинировать в одном проекте. Не углубляйтесь в детали реализации ref/reactive, если не спросят.
Что проверяет интервьюер
- Понимание двух парадигм организации кода во Vue
- Умение выбирать подход под задачу
- Знание базовых функций Composition API (ref, reactive, computed, watch)
- Осознание преимуществ и недостатков каждого подхода
- Отсутствие путаницы между Vue 2 и Vue 3
Типичные ошибки
- Утверждение, что Composition API полностью заменяет Options API (это не так)
- Путаница между ref и reactive: забывают про .value для ref в script
- Попытка использовать this внутри setup (this недоступен)
- Смешивание подходов в одном компоненте без понимания, зачем это нужно
- Игнорирование lifecycle hooks: в Composition API они пишутся как onMounted, а не mounted
> Похожие задачи по frontend
Что такое event loop в JavaScript и как он работает с микрозадачами и макрозадачами
Как определить тип переменной через ReturnType в TypeScript
Кэшируются ли вычисляемые свойства во Vue и как работает мемоизация
Какие способы динамического рендера компонентов и директивы используются во Vue
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью