Next.js. Оптимизация шрифтов
Next реально много делает для оптимизации тяжелых ресурсов. Про изображения мы уже поговорили, теперь поговорим о шрифтах. Next предоставляет удобные функции для работы с ними, в том числе и для google-шрифтов.
Все шрифты хостятся на вашем сервере (гугловские шрифты загружаются во время сборки и тоже помещаются на сервер).
Для работы понадобится пакет @next/font.
Локальные шрифты
Для локальных шрифтов используем функцию
Функция
Применять такой загруженный шрифт нужно с помощью сгенерированного имени класса. Для нужного элемента в разметке устанавливаем проп
Google-шрифты
Для гугл-шрифтов нужно импортировать функции из пакета @next/font/google. Потребуется указать подмножество шрифта и при необходимости настройки, например, вес и стиль:
Используем эти шрифты точно так же, через
Шрифты в head
Можно использовать и более привычный вариант - указать шрифты в теге
Демо: https://codesandbox.io/p/sandbox/wizardly-dream-5gv4mx?file=%2Fpages%2Findex.tsx&selection=%5B%7B%22endColumn%22%3A37%2C%22endLineNumber%22%3A3%2C%22startColumn%22%3A37%2C%22startLineNumber%22%3A3%7D%5D
В демке для документа установлен глобальный стиль с
Статья в документации: https://nextjs.org/docs/basic-features/font-optimization
#nextjs #серверныйрендеринг #документация #примерыкода
Next реально много делает для оптимизации тяжелых ресурсов. Про изображения мы уже поговорили, теперь поговорим о шрифтах. Next предоставляет удобные функции для работы с ними, в том числе и для google-шрифтов.
Все шрифты хостятся на вашем сервере (гугловские шрифты загружаются во время сборки и тоже помещаются на сервер).
Для работы понадобится пакет @next/font.
Локальные шрифты
Для локальных шрифтов используем функцию
localFont
. Работает и с одним файлом, и с несколькими, если разные начертания находятся в разных файлах:import localFont from '@next/font/local';
const myFont1 = localFont({ src: './my-font.woff2' });
const myFont2 = localFont({
src: [
{
path: './Roboto-Regular.woff2',
weight: '400',
style: 'normal',
},
{
path: './Roboto-Italic.woff2',
weight: '400',
style: 'italic',
},
]
});
Функция
localFont
возвращает объект с полями className
и style
.Применять такой загруженный шрифт нужно с помощью сгенерированного имени класса. Для нужного элемента в разметке устанавливаем проп
className={myFont.className}
. Теперь для этого элемента установлено нужное значение font-family
.Google-шрифты
Для гугл-шрифтов нужно импортировать функции из пакета @next/font/google. Потребуется указать подмножество шрифта и при необходимости настройки, например, вес и стиль:
import { Inter } from '@next/font/google';
import { Roboto } from '@next/font/google';
const inter = Inter({ subsets: ['latin'] })
const roboto = Roboto({
weight: '400',
subsets: ['latin'],
});
const roboto1 = Roboto({
weight: ['400', '700'],
style: ['normal', 'italic'],
subsets: ['latin'],
});
Используем эти шрифты точно так же, через
className
.Шрифты в head
Можно использовать и более привычный вариант - указать шрифты в теге
style
с помощью синтаксиса jsx. Это следует делать в файле _app.tsx. Значение берем из myFont.style.fontFamily
. Важно сделать блок со стилями глобальным (атрибут global
, чтобы стили были помещены в head.Демо: https://codesandbox.io/p/sandbox/wizardly-dream-5gv4mx?file=%2Fpages%2Findex.tsx&selection=%5B%7B%22endColumn%22%3A37%2C%22endLineNumber%22%3A3%2C%22startColumn%22%3A37%2C%22startLineNumber%22%3A3%7D%5D
В демке для документа установлен глобальный стиль с
font-family: Inter
(файл pages/_app.tsx). На главной странице (pages/index.tsx) загружен шрифт Pacifico. Он установлен для одного абзаца с помощью className
.Статья в документации: https://nextjs.org/docs/basic-features/font-optimization
#nextjs #серверныйрендеринг #документация #примерыкода
codesandbox.io
Next.js. Fonts. React Junior
CodeSandbox is an online editor tailored for web applications.
🔥3👍1
TypeScript в Next.js
Соберем в одном месте типы, которые использует Next:
Данные для серверного рендеринга - GetStaticProps, GetStaticPaths, GetServerSideProps
API-роуты - NextApiRequest, NextApiResponse
Тип
Компонент App - AppProps
#nextjs #документация #typescript
Соберем в одном месте типы, которые использует Next:
Данные для серверного рендеринга - GetStaticProps, GetStaticPaths, GetServerSideProps
import { GetStaticProps, GetStaticPaths, GetServerSideProps } from 'next';
export const getStaticProps: GetStaticProps = async function (context) {
// ...
}
export const getStaticPaths: GetStaticPaths = async function () {
// ...
}
export const getServerSideProps: GetServerSideProps = async function (context) {
// ...
}
API-роуты - NextApiRequest, NextApiResponse
import type { NextApiRequest, NextApiResponse } from 'next'
export default function handler(req: NextApiRequest, res: NextApiResponse) {
res.status(200).json({ name: 'John Doe' })
}
Тип
NextApiResponse
может также принимать обобщенный тип данных ответа.Компонент App - AppProps
import type { AppProps } from 'next/app'
export default function MyApp({ Component, pageProps }: AppProps) {
// ...
}
#nextjs #документация #typescript
👍3🔥1