javascript / intermediate
Snippet
Abfangen von Fehlern in der Komponentenhierarchie mit dem onErrorCaptured-Hook
Vues Lifecycle-Hook `onErrorCaptured` fängt Fehler ab, die von untergeordneten Komponenten im Komponentenbaum aufsteigen. Durch Überprüfung des Fehlers und die Rückgabe von `false` stoppt die Komponente die Weiterleitung des Fehlers und rendert eine isolierte Fallback-Oberfläche für den betroffenen Teilbaum.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { ref, onErrorCaptured, defineComponent, h } from 'vue';export const ErrorBoundary = defineComponent({name: 'ErrorBoundary',setup(_, { slots }) {const activeError = ref(null);const errorInfo = ref('');onErrorCaptured((err, instance, info) => {activeError.value = err instanceof Error ? err : new Error(String(err));errorInfo.value = info;// Return false to prevent the error from bubbling up to parent handlersreturn false;});const resetError = () => {activeError.value = null;errorInfo.value = '';};return () => {if (activeError.value) {return slots.fallback?.({error: activeError.value,info: errorInfo.value,reset: resetError}) ?? h('div', { class: 'error-banner' }, activeError.value.message);}return slots.default?.();};}});
vue
Erklärung
1
onErrorCaptured((err, instance, info) => {
Registriert einen Handler für Fehler, die beim Rendern, in Watchern oder in Computed Properties von Kindkomponenten auftreten.
2
activeError.value = err instanceof Error ? err : new Error(String(err));
Normalisiert beliebige geworfene Werte in reguläre JavaScript-Error-Objekte.
3
return false;
Verhindert das weitere Aufsteigen des Fehlers zum globalen Vue-Error-Handler oder in die Browserkonsole.
4
return slots.fallback?.({ ... }) ?? h('div', ...);
Rendert bedingt den bereitgestellten Fallback-Slot bei Fehlern oder den Standardinhalt im fehlerfreien Zustand.