renderError
— это специальный хук в Vue.js, предназначенный для обработки ошибок, возникающих во время выполнения функции render
. В отличие от errorCaptured
, который перехватывает ошибки во всем дереве компонентов, renderError
работает только на уровне текущего компонента.
Главная задача: Предоставить механизм для:
export default {
render(h) {
// Основная логика рендеринга
},
renderError(h, err) {
// Отображаем запасной интерфейс при ошибке
return h('div', { class: 'error' }, [
h('p', 'Произошла ошибка при отображении компонента'),
h('pre', err.stack) // Отображаем стек ошибки
]);
}
}
export default {
data() {
return {
items: null // Будет заполнено асинхронно
}
},
render(h) {
// Ошибка при items === null
return h('div', this.items.map(item => h('span', item.name)));
},
renderError(h, err) {
return h('div', [
h('h3', 'Ошибка отображения списка'),
h('button', { on: { click: this.refreshData } }, 'Повторить попытку'),
h('details', [
h('summary', 'Подробности ошибки'),
h('pre', err.message)
])
]);
},
methods: {
refreshData() {
// Логика повторной загрузки данных
}
}
}
Особенность | renderError | errorCaptured |
---|---|---|
Область видимости | Только текущий компонент | Все дочерние компоненты |
Фаза работы | Только render-фаза | Все фазы жизненного цикла |
Возможность предотвращения | Не может предотвратить ошибку | Может предотвратить распространение ошибки |
Для комплексной обработки ошибок можно сочетать с errorCaptured
:
export default {
errorCaptured(err, vm, info) {
// Логирование ошибки
sendErrorToLoggingService(err);
// Продолжаем распространение ошибки
return true;
},
renderError(h, err) {
// Отображение UI при ошибке
return h(ErrorDisplay, { props: { error: err } });
}
}
renderError
— это мощный инструмент для изящной обработки ошибок в функции рендеринга, позволяющий сохранить работоспособность приложения даже при критических сбоях в отдельных компонентах. Он особенно полезен для изоляции проблемных участков кода и предоставления пользователю альтернативного интерфейса вместо "белого экрана смерти".