> Какие хуки или composables используются для работы с API во Vue 3 (Vue.js)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Библио-Глобус
Стек: Vue.js
> Пример ответа
Короткий ответ
Во Vue 3 для работы с API используют composables - функции, инкапсулирующие логику запросов и состояния. Популярные решения: useFetch из VueUse, useAsyncData в Nuxt 3, кастомные composables с fetch или axios. Они обеспечивают реактивность, управление загрузкой, обработку ошибок и отмену запросов через AbortController. Вместо хуков (React) во Vue применяется Composition API с composables.
Подробное объяснение
Composables во Vue 3 - это функции, использующие Composition API для создания переиспользуемой логики. Для работы с API они обычно возвращают реактивные refs или reactive объекты с данными, состоянием загрузки и ошибками. В отличие от React хуков, composables не имеют правил порядка вызова и могут вызываться условно.
Основные подходы:
- Кастомный composable с
fetchили axios: полный контроль, но больше кода - VueUse
useFetch: готовая обёртка с кэшированием, отменой запросов, интерцепторами - Nuxt
useAsyncData/useFetch: для SSR, автоматическая дедупликация запросов - Pinia с actions: для централизованного управления состоянием API
Ключевые аспекты:
- Реактивность данных через
refилиreactive - Управление жизненным циклом (отмена запросов при unmount через
onUnmountedилиAbortController) - Обработка ошибок и состояний загрузки
- Кэширование и дедупликация запросов
На практике
В реальных проектах выбор зависит от контекста:
- Для простых запросов -
useFetchиз VueUse или кастомный composable - Для SSR-приложений на Nuxt - встроенные
useFetchиuseAsyncData - Для сложной логики с кэшированием и оптимистичными обновлениями - Pinia + composables
- Для GraphQL -
useQueryиз Vue Apollo илиuseLazyQuery
Важно учитывать отмену запросов при смене роута или размонтировании компонента, чтобы избежать утечек памяти и гонок состояний.
Пример кода
<script setup> import { ref, onUnmounted } from 'vue' function useApi(url) { const data = ref(null) const error = ref(null) const loading = ref(false) const controller = new AbortController() const fetchData = async () => { loading.value = true try { const response = await fetch(url, { signal: controller.signal }) data.value = await response.json() } catch (err) { if (err.name !== 'AbortError') error.value = err.message } finally { loading.value = false } } onUnmounted(() => controller.abort()) return { data, error, loading, fetchData } } const { data, error, loading, fetchData } = useApi('/api/users') fetchData() </script>
Как отвечать на собеседовании
Начни с определения composables как основного способа работы с API во Vue 3. Упомяни популярные решения: VueUse, Nuxt, кастомные реализации. Подчеркни отличие от React хуков - отсутствие правил порядка вызова. Расскажи про управление жизненным циклом и отмену запросов. Приведи пример простого composable. Если спросят про продвинутые сценарии, упомяни кэширование, дедупликацию и интеграцию с Pinia.
Что проверяет интервьюер
- Понимание Composition API и его преимуществ перед Options API
- Умение проектировать переиспользуемые composables
- Знание управления асинхронными операциями и жизненным циклом
- Осведомлённость о готовых решениях (VueUse, Nuxt) и их trade-off
- Способность объяснить разницу между хуками React и composables Vue
Типичные ошибки
- Использование Options API с
mountedвместо composables для логики API - Отсутствие отмены запросов при размонтировании компонента
- Неправильная обработка ошибок (только в консоль, без реактивного состояния)
- Создание composable без возврата реактивных refs (возврат простых значений)
- Избыточная сложность: написание велосипеда вместо использования готового
useFetch - Игнорирование гонок состояний при быстрых переходах между страницами
> Похожие задачи по frontend
Какие хуки жизненного цикла существуют во Vue и для чего они нужны
Что гарантирует аргумент key в списках Vue и влияет ли он на порядок элементов
Для чего используется teleport во Vue 3
В чем разница v-if и v-show во Vue
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью