Rumah  >  Artikel  >  hujung hadapan web  >  Perbandingan skim penghantaran berbilang peringkat dalam komunikasi komponen Vue

Perbandingan skim penghantaran berbilang peringkat dalam komunikasi komponen Vue

WBOY
WBOYasal
2023-07-18 15:21:281099semak imbas

Perbandingan penyelesaian penghantaran berbilang peringkat dalam komunikasi komponen Vue

Vue ialah rangka kerja bahagian hadapan yang sangat popular Ia menyediakan kaedah pembangunan berasaskan komponen dan merealisasikan pembangunan aplikasi yang kompleks melalui sarang dan komunikasi komponen. Dalam pembangunan sebenar, komunikasi antara komponen sering menjadi isu penting. Apabila terdapat perhubungan pelbagai peringkat antara komponen, cara memindahkan data dengan cekap menjadi masalah yang perlu difikirkan oleh pembangun. Artikel ini akan memperkenalkan beberapa skim komunikasi komponen berbilang peringkat biasa dan membandingkannya.

  1. Gunakan prop dan $emit

Vue menyediakan dua kaedah, props dan $emit, untuk melaksanakan pemindahan data antara komponen induk dan anak. Props digunakan oleh komponen induk untuk menghantar data kepada komponen anak, dan komponen anak memperoleh data melalui prop. $emit digunakan oleh komponen anak untuk menghantar data kepada komponen induk Komponen induk memperoleh data dengan mendengar peristiwa $emit pada komponen anak.

Kod sampel adalah seperti berikut:

Komponen induk:

<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>

Komponen kanak-kanak:

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

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

Penyelesaian ini sesuai untuk komunikasi antara komponen ibu bapa dan anak, tetapi apabila terdapat hubungan pelbagai peringkat antara komponen, ia perlu diteruskan dalam komponen perantaraan Melepasi prop dan $emit, kod akan menjadi kompleks dan sukar untuk dikekalkan.

  1. Menggunakan Bas Acara

Event Bus ialah bas acara global yang melaksanakan komunikasi antara komponen dengan mencipta contoh Vue global. Komponen mendengar acara melalui $on dan mencetuskan acara melalui $emit.

Kod sampel adalah seperti berikut:

EventBus.js:

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

Komponen induk:

<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>

Komponen kanak-kanak:

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

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

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

Menggunakan Bas Acara, komunikasi antara mana-mana komponen boleh dicapai, tetapi kerana ia adalah bas acara global , konflik penamaan mudah berlaku dan keadaan huru-hara peristiwa. Dan kerana komponen berkomunikasi secara langsung melalui acara, ia tidak intuitif dan sukar untuk dikesan.

  1. Menggunakan Vuex

Vuex ialah perpustakaan pengurusan negeri rasmi Vue, digunakan untuk melaksanakan keadaan dikongsi antara komponen. Dalam Vuex, data disimpan dalam stor berpusat, dan komponen menukar data dengan memanggil kaedah kedai.

Kod contoh adalah seperti berikut:

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
    }
  }
})

Komponen induk:

<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>

Komponen kanak-kanak:

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

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

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

Menggunakan Vuex dapat menyelesaikan masalah komunikasi antara komponen dengan baik, terutamanya bagi komponen yang mempunyai pelbagai peringkat. perhubungan. Walau bagaimanapun, kerana data perlu dipindahkan melalui stor, stor perlu diperkenalkan ke dalam komponen dan data diubah melalui kaedah komit, yang secara relatifnya meningkatkan kerumitan kod.

Ringkasnya, penyelesaian penghantaran berbilang peringkat dalam komunikasi komponen Vue termasuk prop dan $emit, Bas Acara dan Vuex. Bergantung pada situasi sebenar, memilih penyelesaian yang sesuai boleh meningkatkan kecekapan pembangunan dan kebolehselenggaraan kod dengan lebih baik.

Atas ialah kandungan terperinci Perbandingan skim penghantaran berbilang peringkat dalam komunikasi komponen Vue. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn