Heim  >  Artikel  >  Web-Frontend  >  So beheben Sie den Fehler „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“.

So beheben Sie den Fehler „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“.

王林
王林Original
2023-08-19 10:57:102650Durchsuche

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

So beheben Sie den Fehler „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“

Während des Entwicklungsprozesses bei der Verwendung von Vue.js stoßen wir häufig auf einige Fehlermeldungen. Einer der häufigsten Fehler ist „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“. Dieser Fehler wird normalerweise durch den Versuch verursacht, schreibgeschützte Eigenschaften in der Vue-Instanz zu ändern. Dieser Artikel beschreibt die Ursache dieses Fehlers und bietet eine Lösung sowie zugehörige Codebeispiele.

Fehlerursache

Es gibt zwei Arten von Daten in Vue: responsive Daten und nicht-responsive Daten. Reaktive Daten sind Daten in einer Vue-Instanz. Wenn sich die Daten ändern, aktualisiert Vue die Ansicht automatisch. Nicht reagierende Daten beziehen sich auf Daten außerhalb der Vue-Instanz, und Vue verfolgt deren Änderungen nicht.

Wenn wir Vue für die Datenbindung verwenden, wandelt Vue die Daten in reaktive Daten um. Wenn wir jedoch versuchen, die schreibgeschützte Eigenschaft zu ändern, wird der Fehler „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“ angezeigt.

Problemumgehung

Die Möglichkeit, diesen Fehler zu beheben, besteht darin, die Änderung schreibgeschützter Eigenschaften zu vermeiden. Anhand der Fehlermeldung können wir feststellen, welches Attribut falsch geändert wurde. Als nächstes stellen wir zwei häufige Situationen und entsprechende Lösungen vor.

Szenario 1: Ändern des Props-Attributs

Wenn das Props-Attribut zum Übergeben von Daten von der übergeordneten Komponente an die untergeordnete Komponente verwendet wird, ist das Props-Attribut schreibgeschützt. Wenn wir daher versuchen, das Props-Attribut in der untergeordneten Komponente zu ändern, wird dieser Fehler angezeigt. Um dieses Problem zu lösen, sollten wir eine spezielle von Vue bereitgestellte Methode verwenden, bei der Ereignisse verwendet werden, um die Eigenschaften der übergeordneten Komponente zu aktualisieren.

Das Folgende ist ein Beispielcode, der zeigt, wie das Props-Attribut korrekt verwendet wird:

// 父组件
<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>

In diesem Beispiel leitet die übergeordnete Komponente die Nachricht über das Props-Attribut an die untergeordnete Komponente weiter. Das Schaltflächenklickereignis in der untergeordneten Komponente ruft die Methode „changeMessage“ auf und löst mit this.$emit ein benutzerdefiniertes Ereignis aus, um die neue Nachricht an die Methode „updateMessage“ in der übergeordneten Komponente zurückzugeben. Auf diese Weise vermeiden wir das Ändern schreibgeschützter Requisiteneigenschaften.

Szenario 2: Berechnete Eigenschaften ändern

Berechnete Eigenschaften sind Eigenschaften, die auf der Grundlage anderer Eigenschaften berechnet werden und über eine Caching-Funktion in Vue verfügen. Berechnete Eigenschaften sind standardmäßig schreibgeschützt. Wenn wir versuchen, den Wert einer berechneten Eigenschaft zu ändern, wird auch der Fehler „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“ angezeigt. Um dieses Problem zu lösen, sollten wir die Abhängigkeitseigenschaften der berechneten Eigenschaften ändern.

Das Folgende ist ein Beispielcode, der zeigt, wie berechnete Eigenschaften und abhängige Eigenschaften korrekt verwendet werden:

<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>

In diesem Beispiel verwenden wir das V-Modell, um den Wert des Eingabefelds an die Eigenschaften „firstName“ bzw. „lastName“ zu binden. Die berechnete Eigenschaft fullName berechnet den vollständigen Namen basierend auf firstName und lastName. Beachten Sie, dass wir in der Set-Funktion der berechneten Eigenschaft die abhängige Eigenschaft ändern, nicht die berechnete Eigenschaft selbst. Auf diese Weise vermeiden wir den Fehler, schreibgeschützte Eigenschaften zu ändern.

Zusammenfassung

Bei der Vue-Entwicklung tritt häufig der Fehler „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“ auf. Dieser Fehler wird normalerweise durch den Versuch verursacht, eine schreibgeschützte Eigenschaft zu ändern. Um diesen Fehler zu beheben, sollten wir es vermeiden, schreibgeschützte Eigenschaften zu ändern. In verschiedenen Situationen können wir Ereignisse verwenden, um Requisitenattribute zu aktualisieren oder Abhängigkeitsattribute berechneter Attribute zu ändern, um dieses Problem zu lösen. Ich hoffe, dass die Lösungen und Codebeispiele in diesem Artikel hilfreich sind!

Das obige ist der detaillierte Inhalt vonSo beheben Sie den Fehler „[Vue-Warnung]: Zuweisung zur schreibgeschützten Eigenschaft nicht möglich“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn