В Carbon Components Svelte встроена мощная система работы с формами,
которая позволяет создавать интерактивные элементы ввода с валидацией
данных. Основной принцип заключается в сочетании компонентов
TextInput, NumberInput,
PasswordInput и других с встроенными механизмами проверки
корректности значений.
TextInput с валидациейКомпонент TextInput поддерживает различные состояния:
invalid, warn и helperText. Эти
состояния позволяют визуально информировать пользователя о корректности
введённых данных.
<script>
import { TextInput } from 'carbon-components-svelte';
let value = '';
let isInvalid = false;
let invalidText = 'Поле обязательно для заполнения';
function validate() {
isInvalid = value.trim() === '';
}
</script>
<TextInput
bind:value
id="text-input"
labelText="Имя пользователя"
placeholder="Введите имя"
{invalidText}
invalid={isInvalid}
on:blur={validate}
/>
Ключевые моменты:
invalid — булево значение, указывающее состояние
ошибки.invalidText — текст подсказки при некорректном
вводе.on:blur — событие, используемое для проверки значения
при потере фокуса.NumberInputДля числовых значений удобно использовать NumberInput,
который поддерживает ограничения диапазона и шаг изменения значения.
<script>
import { NumberInput } from 'carbon-components-svelte';
let quantity = 0;
let isInvalid = false;
let invalidText = 'Значение должно быть от 1 до 100';
function validate() {
isInvalid = quantity < 1 || quantity > 100;
}
</script>
<NumberInput
bind:value={quantity}
id="quantity-input"
min={1}
max={100}
step={1}
label="Количество"
invalid={isInvalid}
{invalidText}
on:blur={validate}
/>
Особенности:
min и max задают допустимый диапазон.step управляет шагом изменения значения стрелками.on:blur и условная проверка позволяют
динамически обновлять состояние invalid.PasswordInputКомпонент PasswordInput поддерживает подсказки по
безопасности пароля и визуальную индикацию ошибок.
<script>
import { PasswordInput } from 'carbon-components-svelte';
let password = '';
let isInvalid = false;
let invalidText = 'Пароль должен содержать минимум 8 символов';
function validate() {
isInvalid = password.length < 8;
}
</script>
<PasswordInput
bind:value={password}
id="password-input"
labelText="Пароль"
{invalidText}
invalid={isInvalid}
on:blur={validate}
/>
Особенности:
helperText для отображения
требований к паролю.Регулярные выражения позволяют проверять формат ввода, например, адрес электронной почты:
<script>
import { TextInput } from 'carbon-components-svelte';
let email = '';
let isInvalid = false;
let invalidText = 'Некорректный формат электронной почты';
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
function validate() {
isInvalid = !emailPattern.test(email);
}
</script>
<TextInput
bind:value={email}
id="email-input"
labelText="Email"
placeholder="user@example.com"
{invalidText}
invalid={isInvalid}
on:blur={validate}
/>
Примечания:
test() регулярного
выражения.invalid и invalidText
создается визуальная обратная связь пользователю.Компоненты Carbon поддерживают состояния предупреждения
(warn) и вспомогательных сообщений
(helperText).
<TextInput
id="optional-input"
labelText="Опциональное поле"
placeholder="Введите данные"
helperText="Это поле не является обязательным"
warn={value.length > 10}
warnText="Рекомендуется ввести не более 10 символов"
/>
Особенности:
warn и warnText отображают предупреждение,
не блокируя отправку формы.helperText помогает пользователю правильно заполнить
поле.Для комплексных форм удобно объединять несколько компонентов и отслеживать их состояние через массивы или объекты.
<script>
import { TextInput, NumberInput } from 'carbon-components-svelte';
let formData = { name: '', age: '' };
let errors = { name: false, age: false };
function validateForm() {
errors.name = formData.name.trim() === '';
errors.age = formData.age < 1 || formData.age > 120;
}
</script>
<form on:submit|preventDefault={validateForm}>
<TextInput
bind:value={formData.name}
labelText="Имя"
invalid={errors.name}
invalidText="Имя обязательно"
/>
<NumberInput
bind:value={formData.age}
label="Возраст"
min={1}
max={120}
invalid={errors.age}
invalidText="Некорректный возраст"
/>
<button type="submit">Отправить</button>
</form>
Примечания:
on:submit|preventDefault позволяет
полностью контролировать процесс валидации.errors.blur или input, чтобы не ждать отправки
формы.invalid и
warn по назначению, не смешивая их.helperText и
invalidText для повышения удобства ввода.Валидация в Carbon Components Svelte позволяет создавать гибкие,
наглядные формы, обеспечивающие точный контроль за корректностью данных
без использования сторонних библиотек. Система invalid,
warn и вспомогательных сообщений обеспечивает максимальную
информативность и интуитивность интерфейса.