Composable - функція, яка використовує Composition API (ref, computed, watch, хуки життєвого циклу) і повертає стан та методи. Спосіб винести логіку зі стейтом із компонента й перевикористати її.
// useMouse.js
import { ref, onMounted, onUnmounted } from 'vue';
export function useMouse() {
const x = ref(0);
const y = ref(0);
const update = (event) => { x.value = event.pageX; y.value = event.pageY; };
onMounted(() => window.addEventListener('mousemove', update));
onUnmounted(() => window.removeEventListener('mousemove', update));
return { x, y };
}
const { x, y } = useMouse();
Чим це краще за mixins з Vue 2:
- Зрозуміле джерело. З mixin незрозуміло, звідки в компоненті взялося
this.isLoading. З composable видно:const { isLoading } = useFetch(...). - Немає конфліктів імен. Два mixin з полем
dataтихо перезаписують одне одне. Результати composable можна перейменувати при деструктуризації. - Параметри. Composable приймає аргументи, зокрема реактивні:
useFetch(() =>/api/users/${id.value}). - Типізація працює природно, бо це звичайні функції.
Правила: назва з use, виклик синхронно в setup (щоб хуки життєвого циклу прив'язалися до компонента), повертати ref-и, щоб деструктуризація не губила реактивність.
Готові composables для типових задач є в бібліотеці VueUse.