Maison > interface Web > Voir.js > le corps du texte

Comment gérer l'erreur « [Vue warn] : Éviter de muter directement un accessoire »

王林
Libérer: 2023-08-17 11:12:28
original
2128 Les gens l'ont consulté

如何处理“[Vue warn]: Avoid mutating a prop directly”错误

Comment gérer l'erreur « [Vue warn] : Évitez de muter directement un accessoire »

Lors du développement d'applications Web à l'aide de Vue.js, nous rencontrons souvent des avertissements ou des erreurs. L'un des avertissements courants est "[Vue warn] : évitez de muter directement un accessoire", ce qui signifie que nous modifions directement une propriété (prop) passée par le composant parent dans le composant. Dans cet article, nous verrons comment gérer correctement cette erreur et fournirons un exemple de code.

Tout d'abord, comprenons pourquoi Vue.js émet cet avertissement. Dans Vue.js, le flux de données entre les composants est unidirectionnel et le composant parent transmet les données au composant enfant via l'attribut props. Cette conception garantit la cohérence et la maintenabilité des données. Cependant, si nous modifions ces propriétés transmises directement dans les composants enfants, cela conduira à des données confuses et imprévisibles.

Afin d'éviter l'erreur "[Vue warn]: Eviter de muter directement un accessoire", nous pouvons suivre les étapes suivantes :

  1. Enregistrer les propriétés (prop) transmises par le composant parent dans les données du composant enfant :

    // 父组件
    <template>
      <ChildComponent :data="data" />
    </template>
    <script>
    export default {
      data() {
     return {
       data: { message: 'Hello Vue!' }
     }
      }
    }
    </script>
    
    // 子组件
    <template>
      <div>{{ data.message }}</div>
    </template>
    <script>
    export default {
      props: ['data'],
      data() {
     return {
       localData: this.data
     }
      }
    }
    </script>
    Copier après la connexion

    Dans cet exemple, nous enregistrons l'attribut data transmis par le composant parent dans le localData du composant enfant. De cette façon, nous pouvons librement modifier localData dans le composant enfant sans changer les données du composant parent. Notez que nous utilisons this.data dans la fonction data du composant enfant pour obtenir la valeur de l'attribut data, car dans cette fonction, this fait référence à l'instance du composant enfant.

  2. Utilisez des propriétés calculées pour gérer les modifications des attributs des accessoires :

    // 父组件
    <template>
      <ChildComponent :message="message" />
    </template>
    <script>
    export default {
      data() {
     return {
       message: 'Hello Vue!'
     }
      }
    }
    </script>
    
    // 子组件
    <template>
      <div>{{ computedMessage }}</div>
    </template>
    <script>
    export default {
      props: ['message'],
      computed: {
     computedMessage: {
       get() {
         return this.message;
       },
       set(value) {
         // 禁止直接修改props属性
         console.warn("[Vue warn]: Avoid mutating a prop directly");
       }
     }
      }
    }
    </script>
    Copier après la connexion

    Dans cet exemple, nous utilisons une propriété calculée pour gérer les modifications des attributs des accessoires. Dans la méthode get, nous renvoyons la valeur de l'attribut props ; dans la méthode set, nous interdisons la modification directe de l'attribut props et imprimons un message d'avertissement. De cette façon, nous pouvons garantir que l'attribut props est en lecture seule.

  3. Utilisez des événements pour notifier le composant parent des modifications de propriété :

    // 父组件
    <template>
      <ChildComponent :message="message" @update-message="message => this.message = message" />
    </template>
    <script>
    export default {
      data() {
     return {
       message: 'Hello Vue!'
     }
      }
    }
    </script>
    
    // 子组件
    <template>
      <button @click="updateMessage">Update Message</button>
    </template>
    <script>
    export default {
      props: ['message'],
      methods: {
     updateMessage() {
       const newMessage = 'New Message';
       // 触发自定义事件来通知父组件进行属性的修改
       this.$emit('update-message', newMessage);
     }
      }
    }
    </script>
    Copier après la connexion

    Dans cet exemple, lorsque le bouton est cliqué, le composant enfant déclenchera un événement personnalisé nommé "update-message" et délivrera le nouveau message en même temps. le temps comme paramètres. Après avoir reçu l'événement, le composant parent modifie son attribut de message en un nouveau message.

Pour résumer, la clé pour gérer l'erreur "[Vue warn] : Évitez de muter directement un accessoire" est de suivre les règles de flux de données à sens unique de Vue.js et de ne pas modifier directement les propriétés transmises par le composant parent. Au lieu de cela, vous pouvez enregistrer les propriétés dans les données du composant enfant, utiliser des propriétés calculées pour gérer l'obtention et la définition des propriétés, ou utiliser des événements pour informer les composants parents des modifications de propriétés. Grâce à ces méthodes, nous pouvons éviter le chaos et les erreurs de données et améliorer la stabilité et la maintenabilité des applications Web.

Documentation de référence :

  • Documentation officielle de Vue.js : https://vuejs.org/

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!