Quasar Framework предоставляет мощный набор встроенных композаблов, которые позволяют создавать функциональные компоненты с высокой переиспользуемостью и гибкостью. Композаблы — это функции, использующие Composition API Vue 3, которые инкапсулируют логику и состояние, упрощая архитектуру приложений.
Инкапсуляция состояния и поведения Композабл объединяет реактивные переменные, вычисляемые свойства и методы в единую функцию. Это позволяет избежать дублирования кода при создании нескольких компонентов с похожей логикой.
import { ref, computed } from 'vue'
export function useCounter(initial = 0) {
const count = ref(initial)
const increment = () => count.value++
const decrement = () => count.value--
const double = computed(() => count.value * 2)
return { count, increment, decrement, double }
}Встраиваемость в компоненты Quasar Любой
композабл можно использовать внутри компонентов Quasar, таких как
QBtn, QInput, QTable, не изменяя
их базовую функциональность.
<template>
<div>
<q-btn @click="increment">Увеличить</q-btn>
<p>Значение: {{ count }}</p>
<p>Удвоенное: {{ double }}</p>
</div>
</template>
<script setup>
import { useCounter } from './composables/useCounter'
const { count, increment, double } = useCounter(5)
</script>Quasar предлагает готовые функции-композаблы, которые значительно ускоряют разработку и обеспечивают консистентность приложения:
useQuasar Основной композабл, предоставляющий доступ ко всем глобальным возможностям Quasar.
Примеры использования:
import { useQuasar } from 'quasar'
const $q = useQuasar()
$q.notify({
message: 'Успешная операция',
color: 'green',
position: 'top-right'
})
if ($q.screen.gt.sm) {
console.log('Экран больше small')
}
Ключевые возможности useQuasar:
screen для адаптивного поведения
компонентов.useDialog Управление модальными окнами и
диалогами. Обеспечивает декларативный подход без необходимости вручную
импортировать QDialog в каждом компоненте.
import { useDialog } from 'quasar'
const dialog = useDialog()
dialog({
title: 'Подтверждение',
message: 'Вы уверены?',
cancel: true,
persistent: true
}).onOk(() => console.log('Подтверждено'))useNotify Позволяет отправлять уведомления с настройкой внешнего вида и поведения.
import { useNotify } from 'quasar'
const notify = useNotify()
notify({
message: 'Данные сохранены',
color: 'blue',
timeout: 2500
})useLoading Управление глобальными индикаторами загрузки. Позволяет быстро показывать и скрывать спиннеры при асинхронных операциях.
import { useLoading } from 'quasar'
const loading = useLoading()
async function fetchData() {
loading.show()
await fetch('/api/data')
loading.hide()
}useScreen Реактивный композабл для отслеживания состояния экрана и брейкпоинтов. Используется для адаптивного рендеринга элементов интерфейса.
import { useScreen } from 'quasar'
const screen = useScreen()
if (screen.lt.md) {
console.log('Мобильный режим')
}useDark Управление темной и светлой темой приложения.
import { useDark } from 'quasar'
const isDark = useDark()
function toggleTheme() {
isDark.toggle()
}Quasar композаблы можно комбинировать с пользовательской логикой:
import { ref } from 'vue'
import { useNotify } from 'quasar'
export function useFormHandler() {
const formData = ref({ name: '', email: '' })
const notify = useNotify()
const submit = () => {
if (!formData.value.name || !formData.value.email) {
notify({ message: 'Заполните все поля', color: 'red' })
return
}
notify({ message: 'Форма отправлена', color: 'green' })
}
return { formData, submit }
}
Такой подход обеспечивает чистую архитектуру, где каждый композабл выполняет конкретную задачу: управление состоянием, уведомлениями или взаимодействием с интерфейсом Quasar.
ref, computed, watch для
реактивности.computed, использовать
watchEffect для реактивных цепочек.Встроенные Quasar композаблы позволяют создавать чистую, масштабируемую архитектуру, ускоряют разработку и обеспечивают единую консистентность пользовательского интерфейса, полностью используя потенциал Vue 3 и Composition API. Они дают готовые инструменты для работы с темой, уведомлениями, диалогами, спиннерами и адаптивностью без лишнего кода.