Maison >interface Web >js tutoriel >Pourquoi « ceci » n'est-il plus défini dans les hooks de cycle de vie et les propriétés calculées de Vue.js ?

Pourquoi « ceci » n'est-il plus défini dans les hooks de cycle de vie et les propriétés calculées de Vue.js ?

DDD
DDDoriginal
2024-11-28 04:58:10744parcourir

Why Does

VueJS : "this" non défini dans les hooks de cycle de vie et les propriétés calculées

Dans Vue.js, vous pouvez rencontrer des situations où l'accès à "this" " Le mot-clé dans les hooks de cycle de vie ou les propriétés calculées renvoie « non défini ». Cela se produit lorsque des fonctions fléchées sont utilisées.

Cause :

Fonctions fléchées () => {} liez le mot-clé "this" au contexte en dehors de l'instance Vue. Cela signifie que « ceci » dans une fonction fléchée fait référence à la portée parent, et non à l'instance Vue elle-même.

Exemple 1 :

mounted: () => {
  console.log(this); // logs "undefined"
}

Dans cet exemple, la fonction de flèche utilisée pour le hook "monté" ne lie pas "this" à l'instance Vue.

Exemple 2 :

computed: {
  foo: () => { 
    return this.bar + 1; 
  }
}

Ici, la propriété calculée utilise une fonction de flèche, ce qui provoque l'évaluation de la référence à "this.bar" comme étant indéfini, ce qui entraîne l'erreur "Impossible de lire la propriété 'bar' de non défini."

Solution :

Pour résoudre ce problème et accéder à la référence correcte à "ceci", utilisez les fonctions normales ou le raccourci ES5 :

Fonction régulière :

mounted: function () {
  console.log(this);
}

Raccourci ES5 :

mounted() {
  console.log(this);
}

En utilisant ces approches, vous vous assurez que « ceci » fait référence à l'instance Vue dans les hooks de cycle de vie et les propriétés calculées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn