Breadcrumbs (хлебные крошки) — это компонент навигации, который отображает путь пользователя внутри приложения. Он помогает ориентироваться в сложной структуре страниц и улучшает UX, особенно в больших SPA на SvelteKit.
Структура компонентов В SvelteKit UI библиотеках обычно присутствуют следующие элементы:
Breadcrumbs — контейнер для всего пути.BreadcrumbItem — отдельная крошка.BreadcrumbLink — активная ссылка на страницу.Пример типичной структуры:
<Breadcrumbs>
<BreadcrumbItem>
<BreadcrumbLink href="/">Главная</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbItem>
<BreadcrumbLink href="/products">Продукты</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbItem>
<span>Текущий продукт</span>
</BreadcrumbItem>
</Breadcrumbs>
params
роутов и состояния страницы.<script>
import { page } from '$app/stores';
import { Breadcrumbs, BreadcrumbItem, BreadcrumbLink } from 'sveltekit-ui';
$: crumbs = [
{ name: 'Главная', href: '/' },
{ name: $page.params.category, href: `/category/${$page.params.category}` },
{ name: $page.params.product, href: null }
];
</script>
<Breadcrumbs>
{#each crumbs as crumb, i}
<BreadcrumbItem>
{#if crumb.href}
<BreadcrumbLink href={crumb.href}>{crumb.name}</BreadcrumbLink>
{:else}
<span>{crumb.name}</span>
{/if}
</BreadcrumbItem>
{/each}
</Breadcrumbs>
Стилизация и состояние
current) выделяется другим цветом или
стилем шрифта.Pagination — компонент, который позволяет разбивать длинные списки на страницы и управлять навигацией между ними.
Pagination — контейнер для всей навигации.PaginationItem — отдельная страница или кнопка
управления (следующая/предыдущая).PaginationLink — активная ссылка на страницу.Ellipsis — отображение пропуска страниц при большом
количестве элементов.Пример базовой реализации:
<Pagination total={20} current={5} on:change={(e) => handlePageChange(e.detail)}>
<PaginationItem>
<PaginationLink href="/products?page=4">«</PaginationLink>
</PaginationItem>
{#each Array(20) as _, i}
<PaginationItem>
<PaginationLink href={`/products?page=${i+1}`} class:active={i+1 === 5}>{i+1}</PaginationLink>
</PaginationItem>
{/each}
<PaginationItem>
<PaginationLink href="/products?page=6">»</PaginationLink>
</PaginationItem>
</Pagination>
load
функции, используя параметр page из query.<script>
import { page } from '$app/stores';
import { Pagination, PaginationItem, PaginationLink } from 'sveltekit-ui';
$: currentPage = +$page.url.searchParams.get('page') || 1;
$: totalPages = 50;
function handlePageChange(newPage) {
// Обновление URL без перезагрузки
const url = new URL(window.location);
url.searchParams.set('page', newPage);
history.pushState(null, '', url);
}
</script>
<Pagination total={totalPages} current={currentPage} on:change={handlePageChange}>
{#each Array(totalPages) as _, i}
<PaginationItem>
<PaginationLink href={`?page=${i+1}`} class:active={i+1 === currentPage}>{i+1}</PaginationLink>
</PaginationItem>
{/each}
</Pagination>
Ellipsis.page store и
reactive statements.Эффективное использование этих компонентов улучшает UX, делает интерфейс понятным и управляемым, а также облегчает поддержку кода в больших проектах на SvelteKit.