TreeView в Carbon Components Svelte представляет собой компонент для отображения и управления иерархическими данными в виде древовидной структуры. Он позволяет пользователю разворачивать и сворачивать узлы, выбирать элементы и взаимодействовать с большим объемом связанных данных. Компонент строится на основе стандартных принципов Svelte, обеспечивая высокую производительность и гибкость в настройке.
Для корректного отображения TreeView требуется дерево объектов, где каждый узел может содержать дочерние элементы. Структура обычно выглядит следующим образом:
const treeData = [
{
id: 'root1',
label: 'Корневой элемент 1',
children: [
{ id: 'child1', label: 'Дочерний элемент 1' },
{
id: 'child2',
label: 'Дочерний элемент 2',
children: [
{ id: 'grandchild1', label: 'Внук 1' },
]
}
]
},
{
id: 'root2',
label: 'Корневой элемент 2',
}
];
Ключевые моменты структуры:
id — уникальный идентификатор узла, используется для
отслеживания состояния выбора и раскрытия.label — текст, отображаемый пользователю.children — массив дочерних узлов; если отсутствует,
узел считается листовым.В Carbon Components Svelte для создания дерева используется компонент
вместе с .
Пример базовой реализации:
{#each treeData as node}
{/each}
Особенности:
автоматически проверяет наличие
дочерних элементов и отображает стрелку для раскрытия, если
children существует.{#each} позволяет динамически рендерить
дерево на основе данных.TreeView поддерживает два основных состояния узлов:
expanded)selected)Пример управления состоянием:
{#each treeData as node (node.id)}
node.expanded = e.detail.expanded}
on:select={(e) => node.selected = e.detail.selected}
/>
{/each}
Пояснения:
expanded и selected синхронизируют
визуальное состояние с данными.toggle и select позволяют
реагировать на пользовательские действия и обновлять модель данных.Каждый можно расширять дополнительными
элементами интерфейса:
{node.label}
{#if node.badge}
{node.badge}
{/if}
label позволяет добавить иконки,
счетчики или индикаторы статуса.TreeView может работать с динамическими данными. Для этого дочерние элементы подгружаются по событию раскрытия:
{
if (e.detail.expanded && !node.children) {
node.children = await fetchChildren(node.id);
}
}} />
fetchChildren возвращает массив объектов,
соответствующих структуре дерева.Carbon Components Svelte наследует стили Carbon Design System. Для TreeView доступны стандартные классы:
.bx--tree-view — контейнер дерева.bx--tree-node — отдельный узел.bx--tree-node__label — текст узла.bx--tree-node__toggle — стрелка для раскрытияС помощью CSS можно добавлять кастомные стили для узлов:
.bx--tree-node__label {
font-weight: 600;
}
.bx--tree-node__label .badge {
background-color: #0f62fe;
color: #ffffff;
padding: 2px 6px;
border-radius: 4px;
margin-left: 8px;
}
TreeView интегрирует базовую навигацию с клавиатуры:
Это делает компонент доступным для пользователей с ограниченными возможностями.
#each с ключами
(key={node.id}) для минимизации перерисовки.expanded и selected вне
компонентов, чтобы избежать лишнего рендеринга.