# Lifecycle hooks
Note
Tous les lifecycle hooks ont automatiquement leur contexte this
lié à l'instance, afin que vous puissiez accéder aux données, aux propriétés computed et aux méthodes. Cela signifie que vous ne devez pas utiliser une fonction fléchée pour définir un lifecycle hook (c-à-d. created: () => this.fetchTodos()
). La raison est que les fonctions fléchées lient le contexte parent, donc this
ne sera pas l'instance de composant comme prévu et this.fetchTodos
sera "undefined".
# beforeCreate
Type:
Function
Détails:
Appelé de manière synchrone immédiatement après l'initialisation de l'instance, avant l'observation des donnéess et la configuration des événements/observateurs.
- Voir aussi: Diagramme de Cycle de Vie
# created
Type:
Function
Détails:
Appelé de manière synchrone après la création de l'instance. À ce stade, l'instance a terminé le traitement des options, ce qui signifie que les éléments suivants ont été configurés: observation des donnéess, propriétés computed, méthodes, callbacks des observateurs/événements. Cependant, la phase de montage n'a pas été lancée et la propriété
$el
ne sera pas encore disponible.Voir aussi: Diagramme de Cycle de Vie
# beforeMount
Type:
Function
Détails:
Appelée juste avant le début du montage: la fonction
render
est sur le point d'être appelée pour la première fois.Ce hook n'est pas appelé lors du rendu côté serveur (SSR).
Voir aussi: Diagramme de Cycle de Vie
# mounted
Type:
Function
Détails:
Appelé après le montage de l'instance, où l'élément passé à
Vue.createApp({}).mount()
est remplacé par le nouvellement créévm.$el
. Si l'instance racine est montée sur un élément dans le document,vm.$el
sera également dans le document lorsquemounted
est appelé.Notez que
mounted
ne garantit pas que tous les composants enfants ont également été montés. Si vous voulez attendre que la vue entière soit rendue, vous pouvez utiliser vm.$nextTick à l'intérieur demounted
:mounted() { this.$nextTick(function () { // Code qui ne fonctionnera qu'après que // la vue entière ait été rendue }) }
1
2
3
4
5
6Ce hook n'est pas appelé lors du rendu côté serveur (SSR).
Voir aussi: Diagramme de Cycle de Vie
# beforeUpdate
Type:
Function
Détails:
Appelé lorsque les donnéess changent, avant que le DOM ne soit patché. C'est un bon endroit pour accéder au DOM existant avant une mise à jour, par exemple pour supprimer les écouteurs d'événements ajoutés manuellement.
Ce hook n'est pas appelé lors du rendu côté serveur (SSR), car seul le rendu initial est effectué côté serveur.
Voir aussi: Diagramme de Cycle de Vie
# updated
Type:
Function
Détails:
Appelé après une modification de données, le DOM virtuel est à nouveau rendu et corrigé.
Le DOM du composant aura été mis à jour lorsque ce hook sera appelé, vous pouvez donc effectuer des opérations dépendant du DOM ici. Cependant, dans la plupart des cas, vous devez éviter de changer d'état à l'intérieur du hook. Pour réagir aux changements d'état, il est généralement préférable d'utiliser une propriété computed ou un watcher.
Notez que
updated
ne garantit pas que tous les composants enfants ont également été rendus. Si vous voulez attendre que la vue entière soit de nouveau rendue, vous pouvez utiliser vm.$nextTick à l'intérieur de deupdated
:updated() { this.$nextTick(function () { // Code qui ne fonctionnera qu'après que // la vue entière ait été rendue }) }
1
2
3
4
5
6Ce hook n'est pas appelé lors du rendu côté serveur (SSR).
Voir aussi: Diagramme de Cycle de Vie
# activated
Type:
Function
Détails:
Appelé lorsqu'un composant "keep-alive" est activé.
Ce hook n'est pas appelé lors du rendu côté serveur (SSR).
Voir aussi:
# deactivated
Type:
Function
Détails:
Appelé lorsqu'un composant "keep-alive" est désactivé.
Ce hook n'est pas appelé lors du rendu côté serveur (SSR).
Voir aussi:
# beforeUnmount
Type:
Function
Détails:
Appelé juste avant qu'une instance de composant ne soit démontée. À ce stade, l'instance est toujours pleinement fonctionnelle.
Ce hook n'est pas appelé lors du rendu côté serveur (SSR).
Voir aussi: Diagramme de Cycle de Vie
# unmounted
Type:
Function
Détails:
Appelé après qu'une instance de composant a été démontée. Lorsque ce hook est appelé, toutes les directives de l'instance de composant ont été dissociées, tous les écouteurs d'événements ont été supprimés et toutes les instances de composant enfant ont également été démontées.
Ce hook n'est pas appelé lors du rendu côté serveur (SSR).
Voir aussi: Diagramme de Cycle de Vie
# errorCaptured
Type:
(err: Error, instance: Component, info: string) => ?boolean
Détails:
Appelé lorsqu'une erreur venant d'un composant descendant est capturée. Le hook reçoit trois arguments: l'erreur, l'instance de composant qui a déclenché l'erreur et un "string" contenant des informations sur l'endroit où l'erreur a été capturée. Le hook peut retourner
false
pour empêcher l'erreur de se propager davantage.TIP
Vous pouvez modifier l'état du composant dans ce hook. Cependant, il est important d'avoir des conditions dans votre template ou votre fonction de rendu qui court-circuitent les autres contenus lorsqu'une erreur a été capturée; sinon le composant sera projeté dans une boucle de rendu infinie.
Règles de propagation des erreurs
Par défaut, toutes les erreurs sont toujours envoyées au
config.errorHandler
global s'il est défini, afin que ces erreurs puissent toujours être signalées à un service d'analyse centralisé.Si plusieurs hooks
errorCaptured
existent sur l'arborescence d'un composant parent, ils seront tousinvoqués sur la même erreur.Si le hook
errorCaptured
génère lui-même une erreur, cette erreur et l'erreur capturée d'origine sont envoyées au fichier globalconfig.errorHandler
.Un hook
errorCaptured
peut retournerfalse
pour empêcher l'erreur de se propager davantage. Cela signifie essentiellement que "cette erreur a été gérée et doit être ignorée". Cela empêchera tout hookserrorCaptured
supplémentaire ou leconfig.errorHandler
global d'être invoqué pour cette erreur.
# renderTracked
Type:
(e: DebuggerEvent) => void
Détails:
Appelé lorsque le rendu du DOM virtuel est traqué. Le hook reçoit un
événement de débogage
comme argument. Cet événement vous indique quelle opération le composant a traqué, l'objet cible et la clé de cette opération.Usage:
<div id="app"> <button v-on:click="addToCart">Ajouter au panier</button> <p>Panier({{ cart }})</p> </div>
1
2
3
4const app = Vue.createApp({ data() { return { cart: 0 } }, renderTracked({ key, target, type }) { console.log({ key, target, type }) /* La console affiche ceci lorsque le composant est rendu pour la première: { key: "cart", target: { cart: 0 }, type: "get" } */ }, methods: { addToCart() { this.cart += 1 } } }) app.mount('#app')
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
# renderTriggered
Type:
(e: DebuggerEvent) => void
Détails:
Appelé lorsque le rendu du DOM virtuel est déclenché. Similaire à
renderTracked
, reçoit unévénement de débogage
comme argument. Cet événement vous indique quelle opération a déclenché le nouveau rendu, l'objet cible et la clé de cette opération.Usage:
<div id="app"> <button v-on:click="addToCart">Ajouter au panier</button> <p>Panier({{ cart }})</p> </div>
1
2
3
4const app = Vue.createApp({ data() { return { cart: 0 } }, renderTriggered({ key, target, type }) { console.log({ key, target, type }) }, methods: { addToCart() { this.cart += 1 /* Ceci provoquera l'invocation de renderTriggered { key: "cart", target: { cart: 1 }, type: "set" } */ } } }) app.mount('#app')
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