Компонент Form в библиотеке Naive UI предназначен для создания управляемых форм с поддержкой валидации, настройки стилей и интеграции с различными элементами интерфейса. В отличие от обычных HTML-форм, n-form предоставляет декларативный подход, где структура данных, правила валидации и поведение формы описываются через объекты и свойства.
import { NForm, NFormItem, NInput, NButton } from 'naive-ui';
Создание базовой формы предполагает использование NForm в качестве контейнера, а NFormItem — для каждого поля:
<NForm v-model:value="formData" :rules="rules">
<NFormItem label="Имя" path="name">
<NInput v-model:value="formData.name" placeholder="Введите имя" />
</NFormItem>
<NFormItem label="Email" path="email">
<NInput v-model:value="formData.email" placeholder="Введите email" />
</NFormItem>
<NFormItem>
<NButton type="primary" @click="submitForm">Отправить</NButton>
</NFormItem>
</NForm>
Свойство v-model:value связывает форму с объектом
состояния. Все изменения в полях автоматически синхронизируются с этим
объектом. Например:
const formData = reactive({
name: '',
email: ''
});
Использование реактивного объекта обеспечивает мгновенное обновление интерфейса при изменении данных.
Naive UI поддерживает встроенную валидацию с использованием свойства
rules. Правила определяются как объект, где ключи
соответствуют путям к данным формы, а значения — массивы правил:
const rules = {
name: [
{ required: true, message: 'Имя обязательно', trigger: 'blur' },
{ min: 3, message: 'Минимум 3 символа', trigger: 'blur' }
],
email: [
{ required: true, message: 'Email обязателен', trigger: 'blur' },
{ type: 'email', message: 'Неверный формат email', trigger: 'blur' }
]
};
Каждое правило может содержать:
required — обязательность заполненияmin/max — ограничения длиныpattern — регулярное выражениеtype — тип значения (string, number, email)message — сообщение об ошибкеtrigger — событие, при котором выполняется проверка
(blur, change).Компонент NForm предоставляет методы для программного управления:
validate() — проверка всех полей формы, возвращает
промис с результатом проверки.validateField(fieldPath) — проверка одного поля по
пути.reset() — сброс значений формы к начальному
состоянию.restoreValidation() — сброс всех сообщений
валидации.Пример использования:
const formRef = ref(null);
function submitForm() {
formRef.value.validate().then(() => {
console.log('Форма валидна:', formData);
}).catch(errors => {
console.log('Ошибки формы:', errors);
});
}
Naive UI позволяет настраивать внешний вид формы через props:
labelPlacement — положение метки: left,
top, right.labelWidth — ширина колонки с метками.size — размер элементов: small,
medium, large.inline — режим горизонтальной формы.Пример:
<NForm v-model:value="formData" :rules="rules" labelPlacement="top" labelWidth="120" size="medium" inline>
...
</NForm>
NForm поддерживает вложенные структуры данных, что удобно для сложных форм с объектами и массивами:
const formData = reactive({
user: { name: '', email: '' },
addresses: [
{ street: '', city: '' }
]
});
Для массивов удобно использовать v-for и динамическое
добавление/удаление элементов:
<NFormItem v-for="(address, index) in formData.addresses" :key="index" :label="`Адрес ${index+1}`" :path="`addresses.${index}.street`">
<NInput v-model:value="address.street" placeholder="Улица" />
</NFormItem>
Любой компонент Naive UI, поддерживающий v-model:value,
может быть использован внутри NFormItem, включая:
Это обеспечивает единую обработку состояния и валидации через форму, без необходимости вручную отслеживать изменения каждого поля.
Использование NForm делает код чистым и управляемым, позволяет централизованно управлять валидацией и состоянием, а также легко интегрируется с другими компонентами Naive UI, создавая единый пользовательский интерфейс.