Maison  >  Article  >  interface Web  >  Conseils de programmation et précautions pour la communication des composants Vue

Conseils de programmation et précautions pour la communication des composants Vue

WBOY
WBOYoriginal
2023-07-18 20:02:011415parcourir

Conseils de programmation et précautions pour la communication des composants Vue

Vue.js est un framework JavaScript populaire en raison de sa simplicité, de sa facilité d'utilisation et de ses puissantes capacités de liaison de données, de plus en plus de développeurs choisissent d'utiliser Vue pour développer des applications frontales. Dans le processus de développement de Vue, la communication entre les composants est un sujet très important. Une bonne communication entre les composants peut améliorer l'efficacité du développement et la maintenabilité du code. Cet article présentera quelques compétences de programmation et précautions pour la communication des composants Vue.

1. Communication entre composants parent-enfant
Dans Vue, la communication entre composants parent-enfant est le moyen le plus courant. Le composant parent transmet les données au composant enfant via des accessoires, et le composant enfant transmet les données au composant parent via des événements.

1. Utilisez des accessoires pour transmettre des données

Les composants parents peuvent transmettre des données aux composants enfants via des accessoires. Les composants enfants peuvent recevoir des données transmises par les composants parents et effectuer un rendu ou d'autres opérations.

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

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

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

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

<script>
export default {
  props: ['message']
}
</script>

Dans le code ci-dessus, le composant parent transmet message au composant enfant via des accessoires, et le composant enfant utilise l'option props pour déclarer les propriétés reçues. message传递给子组件,子组件使用props选项声明接收的属性。

2.使用事件传递数据

子组件可以通过$emit方法触发一个自定义事件,并将数据传递给父组件。父组件可以通过v-on监听子组件触发的事件,并获取传递过来的数据。

// 子组件
<template>
  <button @click="handleClick">点击我触发事件</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      this.$emit('my-event', 'Hello Parent!')
    }
  }
}
</script>

// 父组件
<template>
  <div>
    <child-component @my-event="handleEvent" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleEvent(message) {
      console.log(message)
    }
  }
}
</script>

在上述代码中,子组件通过this.$emit方法触发my-event事件,并将数据'Hello Parent!'传递给父组件。父组件使用v-on监听my-event事件,并调用相应的方法处理事件。

二、非父子组件通讯
除了父子组件通讯,有时我们还需要在非父子组件之间进行通讯。常用的方法有使用Vue实例作为中央事件总线或使用Vuex进行状态管理。

1.使用Vue实例作为中央事件总线

可以创建一个Vue实例作为中央事件总线,子组件通过该实例触发事件,其他组件通过监听事件接收数据。

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

// 子组件A
<template>
  <button @click="handleClick">点击我触发事件</button>
</template>

<script>
import { EventBus } from './EventBus.js';

export default {
  methods: {
    handleClick() {
      EventBus.$emit('my-event', 'Hello!')
    }
  }
}
</script>

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

<script>
import { EventBus } from './EventBus.js';

export default {
  data() {
    return {
      message: ''
    }
  },
  mounted() {
    EventBus.$on('my-event', (message) => { 
      this.message = message;
    })
  }
}
</script>

在上述代码中,我们创建了一个名为EventBus的Vue实例,并通过该实例实现子组件之间的通讯。子组件A通过EventBus.$emit触发自定义事件my-event,子组件B通过EventBus.$on监听my-event事件,并更新数据。

2.使用Vuex进行状态管理

Vuex是Vue官方提供的一个状态管理库。可以使用Vuex来管理应用的状态并实现组件之间的通讯。

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, message) {
      state.message = message;
    }
  },
  actions: {
    updateMessage({ commit }, message) {
      commit('setMessage', message);
    }
  },
  getters: {
    getMessage(state) {
      return state.message;
    }
  }
});

// 子组件A
<template>
  <button @click="handleClick">点击我触发事件</button>
</template>

<script>
import { mapActions } from 'vuex';

export default {
  methods: {
    ...mapActions(['updateMessage']),
    handleClick() {
      this.updateMessage('Hello Vuex!');
    }
  }
}
</script>

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

<script>
import { mapGetters } from 'vuex';

export default {
  computed: {
    ...mapGetters(['getMessage']),
    message() {
      return this.getMessage;
    }
  }
}
</script>

在上述代码中,我们使用Vuex创建了一个store,包含了statemutationsactionsgetters。子组件A通过mapActions辅助函数调用updateMessage方法更新message的值。子组件B通过mapGetters辅助函数获取message

2. Utiliser des événements pour transmettre des données

Un composant enfant peut déclencher un événement personnalisé via la méthode $emit et transmettre les données au composant parent. Le composant parent peut écouter les événements déclenchés par le composant enfant via v-on et obtenir les données transmises.
    rrreee
  1. Dans le code ci-dessus, le composant enfant déclenche l'événement my-event via la méthode this.$emit et envoie les données 'Bonjour Parent !' Passé au composant parent. Le composant parent utilise v-on pour écouter l'événement my-event et appelle la méthode correspondante pour gérer l'événement.
  2. 2. Communication entre composants non parent-enfant
  3. En plus de la communication entre composants parent-enfant, nous devons parfois également communiquer entre des composants non parent-enfant. Les méthodes couramment utilisées incluent l'utilisation d'une instance Vue comme bus d'événements central ou l'utilisation de Vuex pour la gestion des états.
  4. 1. Utilisez une instance Vue comme bus d'événements central

Vous pouvez créer une instance Vue comme bus d'événements central. Les sous-composants déclenchent des événements via cette instance, et d'autres composants reçoivent des données en écoutant les événements.
rrreee

Dans le code ci-dessus, nous avons créé une instance Vue nommée EventBus et implémenté la communication entre les sous-composants via cette instance. Le sous-composant A déclenche l'événement personnalisé my-event via EventBus.$emit, et le sous-composant B écoute my via <code>EventBus.$on -event événement et mise à jour des données. 🎜🎜2. Utilisez Vuex pour la gestion de l'état🎜🎜Vuex est une bibliothèque de gestion d'état officiellement fournie par Vue. Vous pouvez utiliser Vuex pour gérer l'état de votre application et implémenter la communication entre les composants. 🎜rrreee🎜Dans le code ci-dessus, nous utilisons Vuex pour créer un magasin, comprenant état, mutations, actions et getters. Le sous-composant A met à jour la valeur de message en appelant la méthode updateMessage via la fonction d'assistance mapActions. Le sous-composant B obtient la valeur de message via la fonction auxiliaire mapGetters. 🎜🎜3. Notes🎜🎜🎜 Faites bon usage des propriétés calculées : Dans Vue, les propriétés calculées sont une fonctionnalité très utile. L'utilisation d'attributs calculés peut éviter d'écrire des expressions complexes dans des modèles et peut également mettre en cache les résultats de plusieurs calculs d'attributs de données pour améliorer les performances. 🎜🎜Essayez d'éviter de modifier directement les props : dans Vue, les props sont en lecture seule et les valeurs des props ne doivent pas être modifiées directement. Si vous devez modifier la valeur des accessoires dans un sous-composant, vous devez la convertir en attribut data du sous-composant et la modifier à l'intérieur du sous-composant. Si vous devez transmettre la valeur modifiée au composant parent, vous pouvez utiliser l'événement submit. 🎜🎜Utilisez $refs pour obtenir l'instance du sous-composant : Dans certains scénarios, nous souhaitons obtenir l'instance du sous-composant dans le composant parent, vous pouvez utiliser $refs. En ajoutant l'attribut ref au composant enfant, l'instance du composant enfant peut être obtenue via this.$refs dans le composant parent. 🎜🎜🎜Résumé🎜Dans la communication entre composants Vue, la communication entre composants parent-enfant et la communication entre composants non parent-enfant sont les deux moyens les plus courants. La communication entre les composants parent-enfant peut réaliser le transfert de données et l'interaction via des accessoires et des événements. La communication entre composants non parent-enfant peut être obtenue en créant une instance Vue en tant que bus d'événements central ou en utilisant Vuex pour la gestion de l'état. Lors de l'écriture du code de communication des composants Vue, nous devons faire bon usage des propriétés calculées, éviter de modifier directement les accessoires et utiliser $refs pour obtenir des instances de sous-composants et d'autres techniques pour améliorer l'efficacité du développement et la 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!

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