В Carbon Components Svelte события играют ключевую роль при взаимодействии компонентов с приложением. Библиотека предоставляет набор готовых компонентов, каждый из которых поддерживает стандартные DOM-события, а также собственные, специфические для компонента. Обработка событий позволяет реализовать динамическое поведение интерфейса и реакцию на действия пользователя.
Каждый компонент Svelte, включая Carbon Components, наследует
стандартные события DOM: click, input,
focus, blur и другие. Их обработка происходит
через синтаксис Svelte:
<Button on:click={handleClick}>
Нажми меня
</Button>
<script>
function handleClick(event) {
console.log('Кнопка была нажата', event);
}
</script>
Ключевой момент: объект события (event) всегда доступен
и содержит стандартные свойства, такие как target,
currentTarget, type,
preventDefault() и stopPropagation().
Carbon Components Svelte расширяет стандартный набор событий компонентами, специфичными для конкретного элемента интерфейса. Например, компонент TextInput поддерживает события:
input — срабатывает при изменении значения текстового
поля.change — срабатывает при завершении изменения (обычно
при потере фокуса).invalid — срабатывает при валидации формы и
несоответствии значения требованиям.Пример использования:
<TextInput
labelText="Имя пользователя"
on:input={handleInput}
on:change={handleChange}
/>
<script>
function handleInput(event) {
console.log('Изменение текста:', event.target.value);
}
function handleChange(event) {
console.log('Завершено редактирование:', event.target.value);
}
</script>
Многие Carbon-компоненты генерируют кастомные
события с особыми данными. Например, компонент
Dropdown использует событие select для
передачи выбранного значения:
<Dropdown
items={['Первый', 'Второй', 'Третий']}
on:select={handleSelect}
/>
<script>
function handleSelect(event) {
console.log('Выбран элемент:', event.detail.selectedItem);
}
</script>
Особенность: данные пользовательского события содержатся в свойстве
event.detail. Оно может включать любую информацию, которую
компонент решает передать при срабатывании события.
При работе со сложными интерфейсами рекомендуется использовать делегирование событий. Svelte поддерживает этот подход через обычные обработчики на родительских контейнерах:
<div on:click={handleParentClick}>
<Button id="btn1">Кнопка 1</Button>
<Button id="btn2">Кнопка 2</Button>
</div>
<script>
function handleParentClick(event) {
const targetId = event.target.id;
console.log('Нажата кнопка с ID:', targetId);
}
</script>
Преимущество: уменьшается количество обработчиков и упрощается управление событиями в больших интерфейсах.
Carbon Components Svelte позволяет использовать стандартные методы для контроля поведения событий:
event.preventDefault() — предотвращает стандартное
действие браузера.event.stopPropagation() — предотвращает всплытие
события.Пример с чекбоксом:
<Checkbox
labelText="Принять условия"
on:click={handleClick}
/>
<script>
function handleClick(event) {
event.preventDefault();
console.log('Нажатие обработано, стандартное действие отменено');
}
</script>
При генерации компонентов через {#each} необходимо
помнить, что каждый экземпляр компонента создает собственные события.
Использование привязки к функции-обработчику обеспечивает корректное
получение данных для каждого элемента:
{#each items as item}
<Button on:click={() => handleItemClick(item)}>
{item.name}
</Button>
{/each}
<script>
function handleItemClick(item) {
console.log('Нажат элемент:', item.name);
}
</script>
event.detail для получения данных из
кастомных событий.preventDefault и
stopPropagation только при необходимости.События и обработчики в Carbon Components Svelte обеспечивают гибкую реакцию интерфейса на действия пользователя. Понимание стандартных и кастомных событий, методов их обработки и делегирования позволяет создавать отзывчивые, масштабируемые и управляемые интерфейсы.