VueUse

↑ 4.1 Vue 3: основы, компоненты, Composition API · ← Предыдущая · → Следующая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

Знание готовых composables экономит время: useStorage, useDebounceFn, useEventListener.

Объяснение

VueUse — коллекция сотен composables на Composition API (@vueuse/core, @vueuse/integrations, @vueuse/router и др.).

КатегорияПримеры
СостояниеuseStorage, useLocalStorage, useToggle, useCounter, useRefHistory
ЭлементыuseElementSize, useIntersectionObserver, useResizeObserver, onClickOutside, useFocus
БраузерuseTitle, useClipboard, useDark, usePreferredDark, useMediaQuery, useBreakpoints, useFullscreen, useShare
Сенсоры и событияuseEventListener, useMouse, useKeyModifier, onKeyStroke, useSwipe
СетьuseFetch, useWebSocket, useOnline, useEventSource
УтилитыuseDebounceFn, useThrottleFn, useTimeout, useInterval, useNow, useTimeAgo, refDebounced, watchDebounced, useVModel
АнимацияuseTransition, useRafFn
ИнтеграцииuseAxios, useQRCode, useSortable, useFuse
import { useLocalStorage, useDebounceFn, useEventListener, onClickOutside, useDark, useIntersectionObserver } from "@vueuse/core";
 
const prefs = useLocalStorage("prefs", { theme: "light", perPage: 20 });       // реактивно и синхронно с хранилищем
const search = useDebounceFn((q: string) => load(q), 300);
const dark = useDark();
const target = ref<HTMLElement | null>(null);
onClickOutside(target, () => (open.value = false));
useEventListener(window, "resize", onResize);                                  // автоматическая очистка
const { stop } = useIntersectionObserver(sentinel, ([{ isIntersecting }]) => isIntersecting && loadMore());

Преимущества: очистка ресурсов автоматически (привязка к области), SSR-безопасность, tree-shaking, типы.

Когда не подходит: если нужен один маленький хелпер — проще написать самому; следите за размером зависимостей.

Нюансы и подводные камни

  • Не зависите слепо от сложных composables (например, useFetch) — для API лучше TanStack Query.
  • Проверяйте поддержку API в целевых браузерах.
  • Версии @vueuse/* пакетов должны совпадать.
  • Прежде чем писать свой composable, посмотрите VueUse.

Практика

  1. Замените ручные слушатели событий и таймеры на VueUse.
  2. Реализуйте тёмную тему через useDark.
  3. Сделайте бесконечную прокрутку через useIntersectionObserver.

Вопросы с ответами

Связанные темы