В библиотеке Quasar для Vue.js управление серверным рендерингом
критически важно при работе с компонентами, которые не должны
рендериться на сервере или зависят от объектов, доступных только на
клиенте, например window, document или
сторонние библиотеки, не поддерживающие SSR. Для этого используется
компонент QNoSsr.
QNoSsr предотвращает рендеринг вложенного контента на сервере, гарантируя, что он будет создан исключительно на клиентской стороне. Это позволяет:
Пример базового использования:
<template>
<q-no-ssr>
<div>
Это содержимое будет рендериться только на клиенте
</div>
</q-no-ssr>
</template>
На сервере <div> не появится в HTML, а на клиенте
оно будет добавлено после гидратации.
placeholderДля повышения UX при рендеринге на клиенте можно использовать placeholder, который отображается до появления реального содержимого:
<q-no-ssr placeholder="Загрузка компонента...">
<expensive-component />
</q-no-ssr>
placeholder может быть строкой, HTML-кодом или любым
Vue-компонентом.placeholder помогает предотвратить
“мигание” пустого пространства при клиентском рендеринге.QNoSsr поддерживает управление через проп
hide-on-ssr и условные конструкции.
Пример:
<q-no-ssr v-if="isClientReady">
<chart-component :data="chartData" />
</q-no-ssr>
chart-component не будет рендериться до момента,
пока флаг isClientReady не станет true.mounted() для инициализации
данных после загрузки клиента:export default {
data() {
return {
isClientReady: false,
chartData: []
}
},
mounted() {
this.chartData = fetchChartData()
this.isClientReady = true
}
}
Вложенные компоненты QNoSsr могут использоваться для избирательного контроля рендеринга частей интерфейса:
<q-no-ssr>
<header-component />
<q-no-ssr placeholder="Загрузка таблицы...">
<table-component :rows="rows" />
</q-no-ssr>
</q-no-ssr>
Иногда необходимо частично рендерить компонент на сервере, но оставить динамические части для клиента:
<template>
<div>
<div>Серверный контент доступен всегда</div>
<q-no-ssr>
<client-only-widget />
</q-no-ssr>
</div>
</template>
Асинхронная загрузка и QNoSsr:
<q-no-ssr placeholder="Загрузка карты...">
<async-map-component :location="currentLocation" />
</q-no-ssr>
placeholder информирует пользователя о процессе
загрузки.defineAsyncComponent усиливает контроль над клиентским
рендерингом.Использование QNoSsr позволяет гибко управлять серверным рендерингом, предотвращает ошибки при работе с DOM-ориентированными компонентами и оптимизирует процесс гидратации в приложениях Quasar. Контроль рендеринга на уровне компонентов обеспечивает баланс между производительностью сервера и интерактивностью клиентского интерфейса.