В библиотеке Naive UI обработка ошибок является критически важной частью разработки интерфейсов, особенно при взаимодействии с асинхронными операциями, формами и динамическими компонентами. В основе лежит использование встроенных механизмов валидации, уведомлений и реактивного состояния для управления ошибками и их отображения пользователю.
Naive UI предоставляет мощные возможности для валидации
данных форм через компонент n-form и
n-form-item. Основные механизмы:
Правила валидации (rules) Каждое
поле формы может иметь набор правил:
import { reactive } from 'vue';
const formValue = reactive({
username: '',
email: ''
});
const rules = {
username: [
{ required: true, message: 'Имя пользователя обязательно', trigger: 'blur' },
{ min: 3, message: 'Имя должно быть не менее 3 символов', trigger: 'blur' }
],
email: [
{ required: true, message: 'Email обязателен', trigger: 'blur' },
{ type: 'email', message: 'Неверный формат email', trigger: 'blur' }
]
};Асинхронная проверка В rules можно
использовать функции, возвращающие промис, что позволяет проверять
уникальность логина или валидность данных на сервере:
const asyncRule = {
asyncValidator: (rule, value) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (value === 'admin') reject('Имя пользователя занято');
else resolve();
}, 500);
});
},
trigger: 'blur'
};Методы управления ошибками Компонент формы
предоставляет методы validate(),
resetValidation() для контроля состояния валидации:
formRef.value.validate().then(() => {
console.log('Форма валидна');
}).catch(errors => {
console.log('Ошибки валидации:', errors);
});Naive UI поддерживает визуальные индикаторы ошибок:
n-form-item и error-message
автоматически подставляет сообщение в интерфейс формы при наличии
ошибки.Пример отображения ошибки при сабмите формы:
import { createDiscreteApi } from 'naive-ui';
const { message } = createDiscreteApi(['message']);
function submitForm() {
formRef.value.validate().then(() => {
message.success('Данные успешно отправлены');
}).catch(errors => {
message.error('Ошибка при заполнении формы');
console.log(errors);
});
}
Naive UI часто используется совместно с Vue и Composition API. Асинхронные операции требуют аккуратного подхода:
Реактивное состояние ошибки Используется
ref или reactive для отслеживания ошибок:
import { ref } from 'vue';
const error = ref(null);
const loading = ref(false);
async function fetchData() {
loading.value = true;
error.value = null;
try {
const response = await fetch('/api/data');
if (!response.ok) throw new Error('Сервер вернул ошибку');
} catch (e) {
error.value = e.message;
} finally {
loading.value = false;
}
}Интеграция с UI-компонентами Ошибки можно
динамически отображать через n-alert или
n-tag:
Для крупных приложений имеет смысл внедрить централизованную обработку ошибок:
errorHandler:app.config.errorHandler = (err, vm, info) => {
console.error('Глобальная ошибка:', err, info);
message.error('Произошла непредвиденная ошибка');
};
n-notification для уведомления
пользователя о критических сбоях.Применение этих паттернов вместе с компонентами Naive UI позволяет создавать устойчивые и отзывчивые интерфейсы, минимизируя влияние ошибок на пользовательский опыт.
Naive UI легко интегрируется с такими инструментами, как Axios и Pinia, для централизованного управления ошибками:
interceptors)
для обработки HTTP-ошибок:import axios from 'axios';
axios.interceptors.response.use(
response => response,
error => {
message.error(`Ошибка сервера: ${error.response?.status}`);
return Promise.reject(error);
}
);