Maison > interface Web > Voir.js > Conseils pour utiliser provide et inject pour transmettre des données entre les niveaux dans Vue

Conseils pour utiliser provide et inject pour transmettre des données entre les niveaux dans Vue

WBOY
Libérer: 2023-06-25 18:39:39
original
894 Les gens l'ont consulté

Conseils d'utilisation de provide et inject pour transférer des données entre niveaux dans Vue

Dans le développement de Vue, le transfert de données entre composants est une exigence très courante. Normalement, nous pouvons transférer des données entre les composants via des méthodes d'accessoires et d'émission, mais lorsqu'il existe plusieurs niveaux d'imbrication entre les composants, cette méthode devient plus lourde et il est très facile de provoquer un couplage de code. À l'heure actuelle, fournir et injecter dans Vue peut s'avérer utile.

provide et inject sont de nouvelles fonctionnalités introduites dans Vue version 2.2.0. Ces deux API peuvent facilement implémenter l'opération de transmission de données couche par couche. Dans l'exemple suivant, nous utiliserons un exemple avec plusieurs niveaux de composants imbriqués pour montrer comment utiliser provide et inject pour réaliser un transfert de données entre niveaux.

Supposons que nous ayons les composants imbriqués multicouches suivants :

<template>
  <div>
    <child1></child1>
  </div>
</template>

<script>
import child1 from './child1.vue';
export default {
  components: {
    child1
  }
};
</script>
Copier après la connexion
<template>
  <div>
    <child2></child2>
  </div>
</template>

<script>
import child2 from './child2.vue';
export default {
  components: {
    child2
  }
};
</script>
Copier après la connexion
<template>
  <div>
    <p>{{message}}</p>
    <grandchild></grandchild>
  </div>
</template>

<script>
import grandchild from './grandchild.vue';
export default {
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  components: {
    grandchild
  }
};
</script>
Copier après la connexion
<template>
  <div>
    <p>{{message}}</p>
  </div>
</template>

<script>
export default {
  inject: ['message']
};
</script>
Copier après la connexion
Copier après la connexion

Dans cet exemple, nous espérons obtenir les données de message définies dans le composant Parent dans le composant Petit-enfant. Voici l'implémentation spécifique :

Utilisez l'attribut provide dans le composant Parent pour fournir les données qui doivent être transmises :

<template>
  <div>
    <child1 :message="message"></child1>
  </div>
</template>

<script>
export default {
  provide: {
    message: 'Hello Vue!'
  }
};
</script>
Copier après la connexion

Utilisez l'attribut inject dans le composant Grandchild pour injecter les données fournies par provide :

<template>
  <div>
    <p>{{message}}</p>
  </div>
</template>

<script>
export default {
  inject: ['message']
};
</script>
Copier après la connexion
Copier après la connexion

In de cette façon, le composant Petit-enfant Vous pouvez facilement obtenir les données de message fournies dans le composant Parent.

En plus d'utiliser des données fixes dans provide et inject, nous pouvons également utiliser des méthodes dans provide et inject pour fournir et obtenir des données. Par exemple, fournissez une méthode dans le composant Parent pour définir dynamiquement les données du message :

<template>
  <div>
    <child1 :set-message="setMessage"></child1>
  </div>
</template>

<script>
export default {
  provide() {
    return {
      setMessage: message => {
        this.message = message;
      }
    };
  },
  data() {
    return {
      message: 'Hello Vue!'
    };
  }
};
</script>
Copier après la connexion

Appelez la méthode setMessage dans le composant Child1 pour définir les données du message :

<template>
  <div>
    <child2 :message="message"></child2>
    <button @click="setMessage">Set Message</button>
  </div>
</template>

<script>
export default {
  props: ['setMessage'],
  data() {
    return {
      message: 'Hello World!'
    };
  }
};
</script>
Copier après la connexion

Injectez la méthode setMessage via l'attribut inject dans le composant Grandchild :

<template>
  <div>
    <p>{{message}}</p>
    <button @click="setMessage">Set Parent Message</button>
  </div>
</template>

<script>
export default {
  inject: ['setMessage', 'message']
};
</script>
Copier après la connexion

Grâce à cela, le composant Grandchild peut appeler la méthode setMessage dans le composant Parent pour définir dynamiquement les données du message.

Résumé :

En utilisant les attributs provide et inject, nous pouvons facilement atteindre l'objectif de transmettre des données entre les niveaux. Lorsque vous utilisez ces deux propriétés, vous devez faire attention à éviter l'imbrication profonde et le couplage de composants afin d'atteindre les objectifs de simplicité et de maintenabilité du code.

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