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

Comment résoudre l'erreur Vue : impossible d'utiliser correctement provide et inject pour l'injection de dépendances

WBOY
Libérer: 2023-08-20 09:37:04
original
1415 Les gens l'ont consulté

Comment résoudre lerreur Vue : impossible dutiliser correctement provide et inject pour linjection de dépendances

Comment résoudre l'erreur Vue : impossible d'utiliser correctement provide et inject pour l'injection de dépendances

Vue.js est un framework progressif basé sur JavaScript, qui utilise l'idée de composantisation pour réaliser un développement front-end. Dans Vue.js, nous utilisons souvent provide et inject pour l'injection de dépendances entre les composants. Mais parfois, nous pouvons rencontrer une erreur qui ne permet pas d'utiliser correctement provide et inject pour l'injection de dépendances. Cet article expliquera la cause de cette erreur et comment la corriger.

Description du problème

Lorsque nous utilisons provide dans le composant parent pour fournir une valeur et que nous utilisons inject dans le composant enfant pour recevoir la valeur, nous rencontrons parfois une erreur : Provide/inject should not be used with React render functions. Le message d'erreur spécifique peut varier, mais la signification générale est que vous ne devez pas utiliser provide et inject pour l'injection de dépendances lorsque vous utilisez les fonctions de rendu de React.

Cause du problème

La raison de cette erreur est que Vue.js vérifie le type de la fonction de rendu lors de l'utilisation de provide et inject pour l'injection de dépendances. Si la fonction de rendu est basée sur React, alors Vue.js pensera que l'utilisation de provide et inject est incorrecte, car il existe d'autres façons d'effectuer une injection de dépendances dans React.

Solution

La solution à ce problème est simple, il suffit d'utiliser d'autres méthodes fournies par Vue.js pour l'injection de dépendances. Voici quelques solutions possibles.

1. Accessoires

Une méthode très simple consiste à utiliser des accessoires pour le transfert de données. Dans le composant parent, les données qui doivent être injectées peuvent être transmises au composant enfant via des accessoires. Dans les composants enfants, ces données peuvent être obtenues via this.$props.

Voici un exemple de code :

// 父组件
<template>
  <div>
    <ChildComponent :message="message" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      message: 'Hello World'
    };
  }
};
</script>

// 子组件
<template>
  <div>
    <p>{{ $props.message }}</p>
  </div>
</template>
Copier après la connexion

2. $attrs et $listeners

Une autre façon consiste à utiliser les attributs $attrs et $listeners. L'attribut $attrs peut transmettre au composant enfant les attributs du composant parent qui ne sont pas reçus par les accessoires du composant enfant, et l'attribut $listeners peut transmettre les événements du composant parent au composant enfant.

Ce qui suit est un exemple de code :

// 父组件
<template>
  <div>
    <ChildComponent v-bind="$attrs" v-on="$listeners" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  }
};
</script>

// 子组件
<template>
  <div>
    <p>{{ $attrs.message }}</p>
    <button @click="$listeners.click">点击我</button>
  </div>
</template>
Copier après la connexion

3. EventBus

Une autre méthode consiste à utiliser EventBus pour diffuser des événements. Dans Vue.js, nous pouvons réaliser la communication entre les composants en créant un EventBus global.

Ce qui suit est un exemple de code :

// EventBus.js
import Vue from 'vue';
export default new Vue();

// 父组件
<template>
  <div>
    <button @click="sendMessage">发送消息</button>
  </div>
</template>

<script>
import EventBus from './EventBus';

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message', 'Hello World');
    }
  }
};
</script>

// 子组件
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
import EventBus from './EventBus';

export default {
  data() {
    return {
      message: ''
    };
  },
  mounted() {
    EventBus.$on('message', (message) => {
      this.message = message;
    });
  }
};
</script>
Copier après la connexion

Résumé

Dans Vue.js, nous utilisons souvent provide et inject pour l'injection de dépendances, mais parfois nous rencontrons des problèmes qui font que provide et inject ne peuvent pas être utilisés correctement. Cet article présente la cause de ce problème et trois solutions : en utilisant des accessoires, $attrs et $listeners, et EventBus. J'espère que cet article pourra vous aider à résoudre ce problème et à améliorer vos capacités techniques dans le développement de Vue.js.

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