File-based routing в SvelteKit
SvelteKit — это фреймворк для разработки приложений на основе Svelte, который упрощает создание веб-приложений, обеспечивая удобную систему маршрутизации, поддержку серверного рендеринга и многое другое. Одной из важнейших особенностей SvelteKit является его система маршрутизации, основанная на файлах. Эта система позволяет автоматически генерировать маршруты на основе структуры каталогов и файлов в проекте, избавляя разработчика от необходимости вручную настраивать конфигурацию маршрутов.
В SvelteKit маршруты создаются на основе структуры папок в каталоге
src/routes. Каждый файл в этом каталоге представляет собой
страницу или компонент, который будет доступен по определенному URL.
Фреймворк автоматически анализирует структуру каталогов и формирует
маршруты, что позволяет легко организовать навигацию без лишних
настроек.
Основной принцип работы маршрутизации в SvelteKit — это связь между файлами и URL. Рассмотрим типичную структуру проекта:
src/
routes/
index.svelte // Главная страница
about.svelte // Страница "О нас"
blog/
index.svelte // Страница списка блогов
[slug].svelte // Страница отдельного блога
В этой структуре:
index.svelte в корневом каталоге routes
соответствует главной странице (/).about.svelte будет доступен по URL
/about.blog содержит два файла:
index.svelte, который будет доступен по /blog,
и [slug].svelte, который будет обрабатывать динамические
маршруты, например /blog/my-first-post.В SvelteKit можно создавать динамические маршруты, используя квадратные скобки в названии файла или папки. Это позволяет работать с переменными частями URL. Пример:
src/
routes/
blog/
[slug].svelte
Файл [slug].svelte будет обработчиком маршрутов, которые
содержат переменную часть в URL. Например, если пользователь перейдет по
пути /blog/my-first-post, то в компоненте
[slug].svelte можно получить доступ к значению
my-first-post.
Чтобы извлечь параметры маршрута, можно использовать хук
load:
// blog/[slug].svelte
<script context="module" lang="ts">
export async function load({ params }) {
const { slug } = params;
const response = await fetch(`/api/blog/${slug}`);
const post = await response.json();
return { props: { post } };
}
</script>
<script>
export let post;
</script>
<h1>{post.title}</h1>
<p>{post.content}</p>
В этом примере параметр slug извлекается из объекта
params, переданного в хук load, и используется
для получения данных о посте через API.
Система маршрутизации в SvelteKit поддерживает создание вложенных маршрутов с помощью вложенных папок. Это позволяет более логично организовывать страницы, которые имеют иерархическую структуру. Например:
src/
routes/
blog/
index.svelte // Список блогов
[slug].svelte // Страница блога по slug
[slug]/edit.svelte // Страница редактирования блога
В данном случае /blog/:slug/edit будет отображать
страницу редактирования блога. Это позволяет создавать более сложные
маршруты, поддерживающие вложенные компоненты и страницы.
SvelteKit поддерживает преобразование путей с использованием префиксов и перенаправлений. Это позволяет контролировать, как файлы и URL-сегменты будут сопоставляться. Например, можно создать редирект с одного URL на другой.
// src/routes/about.js
export function load() {
return { status: 301, redirect: '/new-about' };
}
Этот код будет перенаправлять все запросы на страницу
/about на новый путь /new-about.
SvelteKit поддерживает несколько типов файлов в каталоге
src/routes. Помимо стандартных .svelte файлов,
можно использовать .ts, .js, .md
и другие расширения, в зависимости от нужд проекта. Это дает гибкость в
выборе форматов, которые лучше всего подходят для конкретных задач.
.svelte: Стандартные страницы и компоненты..js, .ts: Страницы, которые экспортируют
функции для обработки логики..md: Статические страницы, генерируемые из
Markdown.В случае более сложных маршрутов, где нужно использовать несколько динамических сегментов, структура может быть следующей:
src/
routes/
[category]/
[id].svelte
Здесь category и id будут динамическими
параметрами. Такой подход помогает создавать более гибкие и
многозадачные маршруты.
При создании сложных маршрутов могут возникать ошибки, которые
следует обработать. Для этого SvelteKit предоставляет механизм обработки
ошибок, где можно задать страницы, которые будут отображаться при
возникновении ошибки. Для этого используется файл
_error.svelte.
src/
routes/
_error.svelte // Обработчик ошибок
В этом файле можно задать логику для отображения ошибки, например:
<script>
export let error;
</script>
<h1>Произошла ошибка!</h1>
<p>{error.message}</p>
Этот компонент будет показываться при возникновении ошибки в маршруте.
Система маршрутизации на основе файлов в SvelteKit делает разработку веб-приложений гораздо проще и удобнее. Автоматическое сопоставление файлов и URL-ов, поддержка динамических сегментов и вложенных маршрутов позволяет создавать сложные структуры с минимальными усилиями. SvelteKit, благодаря своей гибкости и простоте, является отличным выбором для разработки современных веб-приложений.