Maison  >  Article  >  interface Web  >  Comment résoudre l'erreur « [Vue warn] : Impossible d'attribuer une propriété en lecture seule »

Comment résoudre l'erreur « [Vue warn] : Impossible d'attribuer une propriété en lecture seule »

王林
王林original
2023-08-19 10:57:102650parcourir

解决“[Vue warn]: Cannot assign to read only property”错误的方法

Comment résoudre l'erreur « [Vue warn] : Impossible d'attribuer une propriété en lecture seule »

Pendant le processus de développement de l'utilisation de Vue.js, nous rencontrons souvent des invites d'erreur. L'une des erreurs courantes est « [Vue warn] : Impossible d'attribuer une propriété en lecture seule ». Cette erreur est généralement provoquée par la tentative de modification des propriétés en lecture seule dans l'instance Vue. Cet article détaille la cause de cette erreur et fournit une solution et des exemples de code associés.

Cause de l'erreur

Il existe deux types de données dans Vue : les données réactives et les données non réactives. Les données réactives sont des données dans une instance Vue. Lorsque les données changent, Vue met automatiquement à jour la vue. Les données non réactives font référence aux données en dehors de l'instance Vue, et Vue ne suivra pas ses modifications.

Lorsque nous utilisons Vue pour la liaison de données, Vue convertira les données en données réactives. Cependant, si nous essayons de modifier la propriété en lecture seule, l'erreur « [Vue warn] : Impossible d'attribuer à la propriété en lecture seule » apparaîtra.

Solution

La façon de résoudre cette erreur est d'éviter de modifier les propriétés en lecture seule. Selon le message d'erreur, nous pouvons déterminer quel attribut a été incorrectement modifié. Ensuite, nous présenterons deux situations courantes et les solutions correspondantes.

Scénario 1 : Modifier l'attribut props

Lorsque vous utilisez l'attribut props pour transmettre des données du composant parent au composant enfant, l'attribut props est en lecture seule. Par conséquent, si nous essayons de modifier l'attribut props dans le composant enfant, cette erreur apparaîtra. Pour résoudre ce problème, nous devons utiliser une méthode spéciale fournie par Vue, qui consiste à utiliser des événements pour mettre à jour les propriétés du composant parent.

Ce qui suit est un exemple de code qui montre comment utiliser correctement l'attribut props :

// 父组件
<template>
  <div>
    <child-component :message="message" @updateMessage="updateMessage"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  methods: {
    updateMessage(newMessage) {
      this.message = newMessage;
    }
  }
}
</script>

// 子组件
<template>
  <div>
    <button @click="changeMessage">Change Message</button>
  </div>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  },
  methods: {
    changeMessage() {
      this.$emit('updateMessage', 'New Message');
    }
  }
}
</script>

Dans cet exemple, le composant parent transmet le message au composant enfant via l'attribut props. L'événement de clic sur le bouton dans le composant enfant appelle la méthode changeMessage et utilise this.$emit pour déclencher un événement personnalisé afin de renvoyer le nouveau message à la méthode updateMessage dans le composant parent. De cette façon, nous évitons de modifier les propriétés des accessoires en lecture seule.

Scénario 2 : Modifier les propriétés calculées

Les propriétés calculées sont des propriétés calculées en fonction d'autres propriétés et ont une fonction de mise en cache dans Vue. Par défaut, les propriétés calculées sont en lecture seule. Si nous essayons de modifier la valeur d'une propriété calculée, l'erreur « [Vue warn] : Impossible d'attribuer à la propriété en lecture seule » se produira également. Pour résoudre ce problème, nous devons modifier les propriétés de dépendance des propriétés calculées.

Ce qui suit est un exemple de code qui montre comment utiliser correctement les propriétés calculées et les propriétés dépendantes :

<template>
  <div>
    <input v-model="firstName">
    <input v-model="lastName">
    <p>{{ fullName }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName: {
      get() {
        return this.firstName + ' ' + this.lastName;
      },
      set(value) {
        const names = value.split(' ');
        this.firstName = names[0];
        this.lastName = names[1];
      }
    }
  }
}
</script>

Dans cet exemple, nous utilisons v-model pour lier la valeur de la zone de saisie aux propriétés firstName et lastName respectivement. La propriété calculée fullName calcule le nom complet en fonction de firstName et lastName. Notez que dans la fonction set de la propriété calculée, nous modifions la propriété dépendante, pas la propriété calculée elle-même. De cette façon, nous évitons l’erreur de modification des propriétés en lecture seule.

Résumé

Dans le développement de Vue, nous rencontrons souvent l'erreur « [Vue warn] : Impossible d'attribuer une propriété en lecture seule ». Cette erreur est généralement provoquée par une tentative de modification d'une propriété en lecture seule. Pour résoudre cette erreur, nous devons éviter de modifier les propriétés en lecture seule. Pour différentes situations, nous pouvons utiliser des événements pour mettre à jour les attributs des accessoires ou modifier les attributs de dépendance des attributs calculés pour résoudre ce problème. J'espère que les solutions et les exemples de code contenus dans cet article seront utiles !

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