generateViewport
Вы можете настроить начальный viewport страницы с помощью статического объекта viewport
или динамической функции generateViewport
.
Полезно знать:
- Экспорт объекта
viewport
и функцииgenerateViewport
поддерживается только в Server Components.- Нельзя экспортировать одновременно объект
viewport
и функциюgenerateViewport
из одного сегмента маршрута.- Если вы переходите с экспорта
metadata
, вы можете использовать codemod для преобразования metadata в viewport для обновления изменений.
Объект viewport
Для определения параметров viewport экспортируйте объект viewport
из файла layout.jsx
или page.jsx
.
import type { Viewport } from 'next'
export const viewport: Viewport = {
themeColor: 'black',
}
export default function Page() {}
export const viewport = {
themeColor: 'black',
}
export default function Page() {}
Функция generateViewport
Функция generateViewport
должна возвращать объект Viewport
, содержащий одно или несколько полей viewport.
export function generateViewport({ params }) {
return {
themeColor: '...',
}
}
export function generateViewport({ params }) {
return {
themeColor: '...',
}
}
Полезно знать:
- Если viewport не зависит от runtime-информации, его следует определять с помощью статического объекта
viewport
, а не функцииgenerateViewport
.
Поля Viewport
themeColor
Подробнее о theme-color
.
Простой цвет темы
import type { Viewport } from 'next'
export const viewport: Viewport = {
themeColor: 'black',
}
export const viewport = {
themeColor: 'black',
}
<meta name="theme-color" content="black" />
С атрибутом media
import type { Viewport } from 'next'
export const viewport: Viewport = {
themeColor: [
{ media: '(prefers-color-scheme: light)', color: 'cyan' },
{ media: '(prefers-color-scheme: dark)', color: 'black' },
],
}
export const viewport = {
themeColor: [
{ media: '(prefers-color-scheme: light)', color: 'cyan' },
{ media: '(prefers-color-scheme: dark)', color: 'black' },
],
}
<meta name="theme-color" media="(prefers-color-scheme: light)" content="cyan" />
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="black" />
width
, initialScale
, maximumScale
и userScalable
Полезно знать: Метатег
viewport
устанавливается автоматически, и ручная настройка обычно не требуется, так как значения по умолчанию достаточны. Однако информация предоставлена для полноты.
import type { Viewport } from 'next'
export const viewport: Viewport = {
width: 'device-width',
initialScale: 1,
maximumScale: 1,
userScalable: false,
// Также поддерживается, но реже используется
// interactiveWidget: 'resizes-visual',
}
export const viewport = {
width: 'device-width',
initialScale: 1,
maximumScale: 1,
userScalable: false,
// Также поддерживается, но реже используется
// interactiveWidget: 'resizes-visual',
}
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
/>
colorScheme
Подробнее о color-scheme
.
import type { Viewport } from 'next'
export const viewport: Viewport = {
colorScheme: 'dark',
}
export const viewport = {
colorScheme: 'dark',
}
<meta name="color-scheme" content="dark" />
Типы
Вы можете добавить типизацию к объекту viewport, используя тип Viewport
. Если вы используете встроенный TypeScript-плагин в вашей IDE, вам не нужно добавлять тип вручную, но вы всё равно можете явно указать его при желании.
Объект viewport
import type { Viewport } from 'next'
export const viewport: Viewport = {
themeColor: 'black',
}
Функция generateViewport
Обычная функция
import type { Viewport } from 'next'
export function generateViewport(): Viewport {
return {
themeColor: 'black',
}
}
С параметрами сегмента
import type { Viewport } from 'next'
type Props = {
params: Promise<{ id: string }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}
export function generateViewport({ params, searchParams }: Props): Viewport {
return {
themeColor: 'black',
}
}
export default function Page({ params, searchParams }: Props) {}
JavaScript-проекты
Для JavaScript-проектов вы можете использовать JSDoc для добавления типизации.
/** @type {import("next").Viewport} */
export const viewport = {
themeColor: 'black',
}
История версий
Версия | Изменения |
---|---|
v14.0.0 | Добавлены viewport и generateViewport . |