layout.tsx
Обзор
Файл layout.tsx является корневым (root) макетом (layout) для веб-приложения на базе Next.js. Его основная задача — обернуть всё содержимое приложения в общий HTML-каркас, настроить глобальные стили и шрифты, а также предоставить контекст и структуру для дочерних компонентов. В частности, этот файл интегрирует провайдер состояния игры (GameProvider) и базовый компонент компоновки интерфейса игры (GameLayout), обеспечивая газлесс (без комиссий) игровой опыт Web3.
Подробное описание
Импорты
Metadata(тип) изnext— используется для описания метаданных страницы.Interизnext/font/google— импорт шрифта Inter с поддержкой латинского набора символов.Локальный CSS-файл
globals.css— глобальные стили приложения.GameProvider— React Context провайдер, управляющий состоянием игры.GameLayout— компонент, формирующий структуру и визуальное оформление игрового интерфейса.
Константы
inter
const inter = Inter({ subsets: ['latin'] });
Инициализация шрифта Inter с латинским набором символов.
Возвращает объект с классом CSS
inter.className, который применяется к элементу<body>, чтобы глобально использовать этот шрифт.
Экспортируемые сущности
metadata: Metadata
export const metadata: Metadata = {
title: 'Mana Game - Gasless Gaming Experience',
description: 'Experience the future of Web3 gaming with gasless transactions powered by Symbiotic',
};
Содержит метаданные страницы, которые Next.js использует для генерации тегов
<title>и<meta>в<head>.title— заголовок вкладки браузера.description— описание, оптимизирующее SEO и появляющееся в поисковых системах.
Функция по умолчанию: RootLayout
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body className={inter.className}>
<GameProvider>
<GameLayout>
{children}
</GameLayout>
</GameProvider>
</body>
</html>
);
}
Описание
Функциональный компонент React для корневого макета.
Принимает проп
children— любой React-элемент или набор элементов, которые будут отрисованы внутри структуры.Возвращает HTML-разметку, определяющую язык страницы (
lang="en"), применяющую глобальный шрифт Inter к<body>.Оборачивает всё содержимое в:
<GameProvider>— обеспечивает контекст игры (например, состояние, функции управления).<GameLayout>— отвечает за визуальное расположение и оформление дочерних элементов.
Параметры
Параметр | Тип | Описание |
|---|---|---|
children |
| Дочерние элементы, вложенные в макет |
Возвращаемое значение
React-элемент, представляющий HTML-макет страницы с контекстом и стилизацией.
Пример использования
В Next.js 13+ (с поддержкой App Router) этот файл используется автоматически как корневой layout, поэтому его не вызывают напрямую. Пример компонента, который будет вложен:
export default function HomePage() {
return <div>Добро пожаловать в игру Mana!</div>;
}
HomePage будет отображаться внутри <GameLayout> и под управлением <GameProvider>.
Важные детали реализации
Используется шрифт Google Inter, импортируемый через встроенный механизм Next.js
next/font/google, что обеспечивает оптимальную загрузку и производительность.Контекст игры централизован в
GameProvider. Это позволяет всем дочерним компонентам получать доступ к состоянию и функциям игры без необходимости пробрасывать пропсы.GameLayoutвыступает в роли визуального контейнера, формирующего пользовательский интерфейс игры.Метаданные задаются на уровне макета, что гарантирует их присутствие на всех страницах приложения.
Язык страницы установлен как английский (
lang="en"), что важно для SEO и доступности.
Взаимодействие с другими частями системы
GameProvider — вероятно, реализует React Context для управления состоянием игры, например, прогрессом игрока, транзакциями, балансом и т.п.
GameLayout — отвечает за размещение элементов UI: меню, игрового поля, статистики и других компонентов.
globals.css — содержит базовые стили, применяемые ко всему приложению.
metadata — интегрируется в механизм Next.js для SEO и управления заголовками страниц.
Все дочерние страницы и компоненты, вложенные в этот layout, автоматически получают доступ к контексту и стилизации.
Диаграмма структуры файла
componentDiagram
RootLayout <|-- GameProvider : Оборачивает
GameProvider <|-- GameLayout : Оборачивает
GameLayout <|-- children : Отображает
RootLayout : +metadata
RootLayout : +inter (шрифт)
RootLayout : +HTML lang="en"
RootLayout : +body с классом inter.className
Итог
Файл layout.tsx — фундаментальный элемент архитектуры приложения, объединяющий глобальные стили, шрифты, метаданные и контекст игрового состояния, а также обеспечивающий единый визуальный каркас для всех страниц и компонентов игры Mana. Он является точкой интеграции между состоянием приложения и его UI-слоем, обеспечивая удобство масштабирования и поддержки кода.