Maison > interface Web > js tutoriel > Pourquoi les fonctions fléchées interrompent-elles les propriétés calculées de Vue et comment puis-je les corriger ?

Pourquoi les fonctions fléchées interrompent-elles les propriétés calculées de Vue et comment puis-je les corriger ?

Barbara Streisand
Libérer: 2024-11-26 03:33:18
original
506 Les gens l'ont consulté

Why Do Arrow Functions Break Vue Computed Properties, and How Can I Fix Them?

Utiliser les fonctions fléchées dans les propriétés calculées de Vue : dépannage

Dans Vue, les propriétés calculées sont utilisées pour dériver des valeurs réactives à partir d'autres propriétés. Bien que les fonctions fléchées puissent simplifier le code dans de nombreux scénarios, elles peuvent être problématiques lorsqu'elles sont utilisées dans des propriétés calculées.

Code original (fonctionnel) :

new Vue({
  el: '#app',
  data: {
    turnRed: false,
    turnGreen: false,
    turnBlue: false
  },
  computed: {
    switchRed: function () {
      return { red: this.turnRed };
    },
    switchGreen: function () {
      return { green: this.turnGreen };
    },
    switchBlue: function () {
      return { blue: this.turnBlue };
    }
  }
});
Copier après la connexion

Code modifié (ne fonctionne pas) :

Cependant, lorsque vous modifiez les méthodes dans les propriétés calculées à l'aide de fonctions fléchées, le comportement changements :

computed: {
  switchRed: () => {
    return { red: this.turnRed };
  },
  switchGreen: () => {
    return { green: this.turnGreen };
  },
  switchBlue: () => {
    return { blue: this.turnBlue };
  }
}
Copier après la connexion

Explication :

La cause première de ce problème est que les fonctions fléchées ne le lient pas à l'instance Vue. Au lieu de cela, ils héritent du contexte de la portée parent. Dans ce cas, la portée parent est la portée globale, elle fait donc référence à l'objet window plutôt qu'à l'instance Vue attendue. Par conséquent, les valeurs turnRed, turnGreen et turnBlue restent non initialisées, ce qui conduit à des couleurs inchangées.

Solution :

Pour résoudre ce problème et faire fonctionner les fonctions fléchées dans les propriétés calculées , Vue recommande d'utiliser la méthode bind pour lier explicitement ceci à l'instance Vue :

computed: {
  switchRed: () => {
    return { red: this.turnRed };
  }.bind(this),
  switchGreen: () => {
    return { green: this.turnGreen };
  }.bind(this),
  switchBlue: () => {
    return { blue: this.turnBlue };
  }.bind(this)
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal