Свойство app.config.errorHandler в Vue3


Глобальный API Vue3

app.config.errorHandlerЭто очень практичное свойство, которое позволяет разработчикам глобально перехватывать и обрабатывать ошибки в приложениях.


1. Что такое app.config.errorHandler?

app.config.errorHandler— это глобальная опция конфигурации в Vue3, используемая для перехвата и обработки неперехваченных ошибок в приложениях. Будь то ошибки, выброшенные в хуках жизненного цикла компонента, обработчиках событий или асинхронных операциях, все они могут бытьapp.config.errorHandlerперехвачены и обработаны.


2. Как использовать app.config.errorHandler?

Чтобы использовать его,app.config.errorHandlerсначала нужно создать экземпляр Vue и установитьerrorHandlerсвойство. Вот простой пример:

Пример

import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)

app.config.errorHandler = (err, vm, info) => {
  console.error('Перехвачена глобальная ошибка:', err)
  console.error('Экземпляр компонента, в котором произошла ошибка:', vm)
  console.error('Сообщение об ошибке:', info)
}

app.mount('#app')

В этом примере мы создали приложение Vue и установилиerrorHandlerКогда в приложении возникает неперехваченная ошибка,errorHandlerфункция будет вызвана, и в неё будут переданы сообщение об ошибке, экземпляр компонента, в котором произошла ошибка, и сообщение об ошибке.

Описание параметра:

  • err: Объект ошибки, содержащий подробную информацию об ошибке.
  • vm: Экземпляр компонента, в котором произошла ошибка.
  • info: Строка, представляющая источник ошибки, напримерLifecycle hooks、Event handlerи т. д.

3. Практические сценарии применения

app.config.errorHandlerВ реальной разработке существует множество сценариев применения. Ниже приведены некоторые распространённые варианты использования:

3.1 Запись журнала ошибок

В производственной среде очень важно перехватывать и записывать журналы ошибок. С помощьюapp.config.errorHandler, мы можем отправлять информацию об ошибке на сервер для хранения и анализа.

Пример

app.config.errorHandler = (err, vm, info) => {
  // Отправить информацию об ошибке на сервер
  fetch('/log-error', {
    method: 'POST',
    body: JSON.stringify({ err, vm, info })
  })
  console.error('Перехвачена глобальная ошибка:', err)
}

3.2 Удобные для пользователя подсказки

Когда в приложении возникает ошибка, мы можем использоватьapp.config.errorHandlerчтобы отображать понятные пользователю сообщения-подсказки вместо того, чтобы позволять пользователям видеть сложные стеки ошибок.

Пример

app.config.errorHandler = (err, vm, info) => {
  alert('Извините, в приложении возникла проблема. Пожалуйста, попробуйте позже.')
  console.error('Перехвачена глобальная ошибка:', err)
}

3.3 Восстановление после ошибок

В некоторых случаях мы можем попытатьсяapp.config.errorHandlerвосстановиться после ошибки в нём, чтобы предотвратить падение приложения.

Пример

app.config.errorHandler = (err, vm, info) => {
  console.error('Перехвачена глобальная ошибка:', err)
  // Попытаться восстановить состояние приложения
  vm.$forceUpdate()
}

4. Примечания

  • Распространение ошибок:app.config.errorHandlerне предотвращает распространение ошибки. Если ошибка не перехвачена, она всё равно будет перехвачена браузером и отображена в консоли.
  • Асинхронные ошибки:app.config.errorHandlerможно перехватывать ошибки в асинхронных операциях, но нужно учитывать механизмы обработки ошибок асинхронного кода.

Глобальный API Vue3

Другие расширения