Heim  >  Artikel  >  Web-Frontend  >  Vergleich mehrstufiger Bereitstellungsschemata in der Vue-Komponentenkommunikation

Vergleich mehrstufiger Bereitstellungsschemata in der Vue-Komponentenkommunikation

WBOY
WBOYOriginal
2023-07-18 15:21:281099Durchsuche

Vergleich von mehrstufigen Bereitstellungslösungen in der Vue-Komponentenkommunikation

Vue ist ein sehr beliebtes Front-End-Framework. Es bietet eine komponentenbasierte Entwicklungsmethode und realisiert die Entwicklung komplexer Anwendungen durch die Verschachtelung und Kommunikation von Komponenten. In der tatsächlichen Entwicklung ist die Kommunikation zwischen Komponenten oft ein wichtiges Thema. Wenn mehrstufige Beziehungen zwischen Komponenten bestehen, wird die Frage, wie Daten effizient übertragen werden können, zu einer Frage, über die sich Entwickler Gedanken machen müssen. In diesem Artikel werden mehrere gängige mehrstufige Komponentenkommunikationsschemata vorgestellt und verglichen.

  1. Verwenden Sie props und $emit

Vue bietet zwei Methoden, props und $emit, um die Datenübertragung zwischen übergeordneten und untergeordneten Komponenten zu implementieren. Requisiten werden von übergeordneten Komponenten verwendet, um Daten an untergeordnete Komponenten zu übergeben, und untergeordnete Komponenten erhalten Daten über Requisiten. $emit wird von untergeordneten Komponenten verwendet, um Daten an übergeordnete Komponenten zu übergeben. Die übergeordnete Komponente erhält Daten, indem sie das $emit-Ereignis auf untergeordneten Komponenten abhört.

Der Beispielcode lautet wie folgt:

Übergeordnete Komponente:

<template>
  <child-component :message="message" @update-message="updateMessage"></child-component>
</template>

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

export default {
  data() {
    return {
      message: ''
    }
  },
  components: {
    ChildComponent
  },
  methods: {
    updateMessage(newMessage) {
      this.message = newMessage
    }
  }
}
</script>

Untergeordnete Komponente:

<template>
  <button @click="sendMessage">发送消息</button>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      default: ''
    }
  },
  methods: {
    sendMessage() {
      this.$emit('update-message', 'Hello, Vue!')
    }
  }
}
</script>

Diese Lösung eignet sich für die Kommunikation zwischen übergeordneten und untergeordneten Komponenten. Wenn jedoch mehrstufige Beziehungen zwischen Komponenten bestehen, muss dies der Fall sein Fortsetzung in den Zwischenkomponenten Durch die Übergabe von props und $emit wird der Code komplex und schwer zu warten.

  1. Event Bus verwenden

Event Bus ist ein globaler Event Bus, der die Kommunikation zwischen Komponenten implementiert, indem er eine globale Vue-Instanz erstellt. Die Komponente lauscht über $on auf Ereignisse und löst Ereignisse über $emit aus.

Der Beispielcode lautet wie folgt:

EventBus.js:

import Vue from 'vue'
export default new Vue()

Übergeordnete Komponente:

<template>
  <child-component></child-component>
</template>

<script>
import ChildComponent from './ChildComponent.vue'
import EventBus from './EventBus.js'

export default {
  components: {
    ChildComponent
  },
  mounted() {
    EventBus.$on('update-message', (newMessage) => {
      this.message = newMessage
    })
  }
}
</script>

Untergeordnete Komponente:

<template>
  <button @click="sendMessage">发送消息</button>
</template>

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

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('update-message', 'Hello, Vue!')
    }
  }
}
</script>

Mit Event Bus kann die Kommunikation zwischen beliebigen Komponenten erreicht werden, da es sich jedoch um einen globalen Ereignisbus handelt , Namenskonflikte und chaotische Umstände des Ereignisses sind anfällig. Und da Komponenten direkt über Ereignisse kommunizieren, ist dies nicht intuitiv und schwer zu verfolgen.

  1. Vuex verwenden

Vuex ist die offizielle Zustandsverwaltungsbibliothek von Vue, die zum Implementieren gemeinsamer Zustände zwischen Komponenten verwendet wird. In Vuex werden Daten in einem zentralen Speicher gespeichert und Komponenten ändern die Daten durch den Aufruf von Speichermethoden.

Der Beispielcode lautet wie folgt:

store.js:

import Vuex from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    updateMessage(state, newMessage) {
      state.message = newMessage
    }
  }
})

Übergeordnete Komponente:

<template>
  <child-component></child-component>
</template>

<script>
import ChildComponent from './ChildComponent.vue'
import store from './store.js'

export default {
  components: {
    ChildComponent
  },
  computed: {
    message() {
      return this.$store.state.message
    }
  }
}
</script>

Untergeordnete Komponente:

<template>
  <button @click="sendMessage">发送消息</button>
</template>

<script>
import store from './store.js'

export default {
  methods: {
    sendMessage() {
      this.$store.commit('updateMessage', 'Hello, Vue!')
    }
  }
}
</script>

Mit Vuex kann das Problem der Kommunikation zwischen Komponenten sehr gut gelöst werden, insbesondere für Komponenten mit mehreren Ebenen Beziehungen. Da jedoch Daten über den Speicher übertragen werden müssen, muss der Speicher in die Komponente eingeführt und die Daten über die Festschreibungsmethode geändert werden, was die Komplexität des Codes relativ erhöht.

Zusammenfassend lässt sich sagen, dass die mehrstufigen Bereitstellungslösungen in der Vue-Komponentenkommunikation Props und $emit, Event Bus und Vuex umfassen. Abhängig von der tatsächlichen Situation kann die Auswahl einer geeigneten Lösung die Entwicklungseffizienz und die Wartbarkeit des Codes besser verbessern.

Das obige ist der detaillierte Inhalt vonVergleich mehrstufiger Bereitstellungsschemata in der Vue-Komponentenkommunikation. 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