Композаблы в Quasar Framework представляют собой высокоуровневые компоненты и функциональные блоки, которые позволяют строить адаптивные и переносимые пользовательские интерфейсы для веба, мобильных устройств и настольных приложений. Они служат связующим звеном между стандартными Vue-компонентами и платформенными API, обеспечивая унифицированный подход к разработке кроссплатформенных приложений.
Композаблы в Quasar реализуются через функции, которые возвращают реактивные данные, методы и объекты состояния. Это концепция, схожая с Composition API в Vue 3, что позволяет:
Основная структура композабла включает:
import { ref, computed } from 'vue';
export function useExample() {
const count = ref(0);
const doubleCount = computed(() => count.value * 2);
function increment() {
count.value++;
}
return {
count,
doubleCount,
increment
};
}
Здесь useExample является композаблом, который
инкапсулирует реактивное состояние и методы для его изменения.
Quasar предоставляет обертки для взаимодействия с платформами через свои сервисы, такие как:
Пример использования платформенных данных:
import { Platform, Screen } from 'quasar';
import { computed } from 'vue';
export function useResponsive() {
const isMobile = computed(() => Platform.is.mobile || Screen.lt.sm);
return { isMobile };
}
Такой композабл позволяет адаптировать интерфейс под мобильные устройства и десктопы без повторного написания логики.
Quasar активно использует композаблы для управления состоянием компонентов:
Пример управления диалогом через композабл:
import { ref } from 'vue';
import { useDialog } from 'quasar';
export function useConfirmation() {
const dialog = useDialog();
function confirmAction(message) {
return dialog({
title: 'Подтверждение',
message,
ok: true,
cancel: true
});
}
return { confirmAction };
}
Композаблы позволяют строить компоненты, которые автоматически адаптируются под платформу. Например, компонент навигации может менять поведение на мобильных устройствах и десктопе:
import { Platform } from 'quasar';
import { ref } from 'vue';
export function useNavigation() {
const drawerOpen = ref(false);
function toggleDrawer() {
drawerOpen.value = !drawerOpen.value;
}
const isMobile = Platform.is.mobile;
return { drawerOpen, toggleDrawer, isMobile };
}
В этом примере логика открытия бокового меню унифицирована, а
рендеринг может адаптироваться через v-if или
v-show в зависимости от платформы.
window или document.Часто несколько композаблов комбинируются для создания сложной функциональности:
import { useResponsive } from './useResponsive';
import { useNavigation } from './useNavigation';
export function useLayout() {
const { isMobile } = useResponsive();
const { drawerOpen, toggleDrawer } = useNavigation();
function adjustLayout() {
if (!isMobile.value && drawerOpen.value) {
drawerOpen.value = false;
}
}
return { isMobile, drawerOpen, toggleDrawer, adjustLayout };
}
Такой подход обеспечивает чистую и поддерживаемую архитектуру приложения, где каждый блок отвечает за конкретный аспект UI или платформенной логики.
Композаблы в Quasar позволяют строить модульные, кроссплатформенные и повторно используемые функциональные блоки. Они интегрируются с платформенными сервисами Quasar, управляют состоянием UI и упрощают адаптацию интерфейсов под различные устройства, обеспечивая масштабируемость и удобство поддержки кода.