Vue3 defineAsyncComponent() Funktion
defineAsyncComponent()Es ist eine in Vue 3 eingeführte Funktion zum asynchronen Laden von Komponenten. Sie ermöglicht es, eine Komponente nur bei Bedarf zu laden, anstatt alle Komponenten auf einmal beim Start der Anwendung zu laden. Dies ist sehr nützlich, um die Leistung großer Anwendungen zu optimieren und die anfängliche Ladezeit zu reduzieren.
Warum defineAsyncComponent() verwenden?
Bei der Entwicklung großer Anwendungen kann das Laden aller Komponenten beim Start der Anwendung zu einer zu langen initialen Ladezeit führen und die Benutzererfahrung beeinträchtigen. Durch die Verwendung vondefineAsyncComponent(), können Sie das Laden bestimmter Komponenten verzögern. Erst wenn Benutzer die relevante Seite oder Funktion besuchen, werden diese Komponenten geladen, wodurch die Leistung der Anwendung verbessert wird.
Wie verwendet man defineAsyncComponent()?
Grundlegende Verwendung
UmdefineAsyncComponent(), müssen Sie es aus Vue importieren und an die Komponente übergeben, die asynchron geladen werden soll. Das folgende ist ein einfaches Beispiel:
Beispiel
const AsyncComponent = defineAsyncComponent(() =>
import('./components/MyComponent.vue')
);
export default {
components: {
AsyncComponent
}
};
In diesem Beispiel,MyComponent.vuedie Komponente wird bei Bedarf asynchron geladen.
Umgang mit Ladezuständen
defineAsyncComponent()Es ermöglicht Ihnen außerdem, Ladezustände zu definieren, wie z. B. Laden, Ladefehler usw. Sie können diese Zustände konfigurieren, indem Sie ein Objekt übergeben:
Beispiel
loader: () => import('./components/MyComponent.vue'),
loadingComponent: LoadingComponent, // Komponente, die während des Ladens angezeigt wird
errorComponent: ErrorComponent, // Komponente, die angezeigt wird, wenn das Laden fehlschlägt
delay: 200, // Verzögerung, bevor die Ladekomponente angezeigt wird (ms)
timeout: 3000 // Zeitlimit für das Laden (ms)
});
In dieser Konfiguration,LoadingComponentwird angezeigt, während die Komponente lädt,ErrorComponentwird angezeigt, wenn das Laden fehlschlägt.
Fehlerbehandlung
Wenn die Komponente nicht geladen werden kann,defineAsyncComponent()bietet eineonErrorCallback-Funktion zur Fehlerbehandlung:
Beispiel
loader: () => import('./components/MyComponent.vue'),
onError(error, retry, fail, attempts) {
if (error.message.includes('Failed to fetch dynamically imported module')) {
retry(); // Laden erneut versuchen
} else {
fail(); // Laden abbrechen
}
}
});
In diesem Beispiel können Sie, wenn das Laden fehlschlägt, wählen, ob Sie das Laden erneut versuchen oder das Laden aufgeben.
Praktische Anwendungsfälle
Bedarfsgesteuertes Laden von Routen
In Vue Router können SiedefineAsyncComponent()verwenden, um Routenkomponenten bei Bedarf zu laden:
Beispiel
const routes = [
{
path: '/about',
component: defineAsyncComponent(() => import('./views/AboutView.vue'))
}
];
Auf diese WeiseAboutView.vuewird die Komponente erst geladen, wenn der Benutzer/aboutdie Route besucht.
Verzögertes Laden großer Komponenten
Für einige große Komponenten können SiedefineAsyncComponent()um sie verzögert zu laden, wodurch sich die anfängliche Ladezeit reduziert:
Beispiel
import('./components/LargeComponent.vue')
);
Andere Erweiterungen
Vue3 Global API