Teknologian jakaminen

Täydellinen selitys Vue 3 -komponenttiviestinnästä: perustekniikoista edistyneisiin tekniikoihin

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

esittely

Vue 3 esittelee Composition API:n, joka tuo uutta joustavuutta ja tehoa komponenttiviestintään.

Komponenttiviestinnän perusteet

Komponenttien määritelmä ja toiminta

Front-end-kehityksessä komponentit voidaan ajatella itsenäisinä yksiköinä, jotka rakentavat käyttöliittymän. Se kapseloi tiettyjä toimintoja ja tyylejä, sitä voidaan käyttää uudelleen ja sitä voidaan kehittää ja testata muista osista riippumatta. Komponenttien päätehtävänä on parantaa koodin uudelleenkäytettävyyttä, ylläpidettävyyttä ja skaalautuvuutta. Jakamalla käyttöliittymän useisiin komponentteihin kehittäjät voivat helpommin hallita monimutkaisia ​​sovelluksia, ja jokainen komponentti voidaan optimoida parantamaan yleistä kehitystehokkuutta ja sovellusten suorituskykyä.

Komponenttipuu ja emo-alakomponenttisuhde

Käyttöliittymäkehyksessä, kuten Vue.js, komponentit voidaan sisäkkäin muodostaa komponenttipuu. Tässä puurakenteessa jokaisella komponentilla voi olla alikomponentteja, ja näillä alikomponenteilla voi olla omat alikomponentit, jotka muodostavat hierarkkisen rakenteen. Tämä rakenne tekee komponenttien välisestä suhteesta selkeän ja helpottaa hallintaa ja ylläpitoa.

  • Vanhemman ja lapsen komponenttisuhde : Komponenttipuussa komponentti voi luoda toisen komponentin. Tässä tapauksessa luojaa kutsutaan pääkomponentiksi ja luotua komponenttia alikomponentiksi. Yläkomponentit voivat välittää tietoja ja menetelmiä alikomponenteille, ja alakomponentit voivat lähettää tietoja yläkomponenteille tapahtumien kautta. Tämä vanhempi-lapsi-suhde on komponenttiviestinnän perusta.
  • Sisaruskomponenttisuhde : Useat saman pääkomponentin alikomponentit ovat sisarkomponenttisuhteita. Sisarkomponentit eivät voi kommunikoida suoraan toistensa kanssa, ja niiden välinen viestintä on yleensä välitettävä emokomponentin kautta.
  • Esi- ja jälkeläisten komponenttien suhteet : Komponenttipuussa emokomponentin emokomponentti on esi-isäkomponentti ja alikomponentin alikomponentti on jälkeläinen komponentti. Tämä suhde on erityisen tärkeä, kun käsitellään syvälle sisäkkäisiä komponentteja.

Komponenttipuiden ja emo-lapsikomponenttisuhteiden käsitteet ovat ratkaisevan tärkeitä komponenttien viestinnän ymmärtämisessä. Näiden perustietojen hallitseminen voi auttaa kehittäjiä suunnittelemaan ja toteuttamaan komponenttien välisiä viestintämekanismeja tehokkaammin.

Vanhemman ja lapsen välinen viestintä (Vue 3)

Vanhempi välittää tiedot lapselle (rekvisiitta)

Mitä ovat rekvisiitta
Rekvisiitta on mekanismi, jolla pääkomponentit välittävät tietoja alakomponenteille.Vue 3:ssa käytädefinePropsAPIa käytetään vastaanottavien rekvisiittausten ilmoittamiseen, mikä ylläpitää yksisuuntaista tiedonkulkua ja varmistaa komponenttien riippumattomuuden ja uudelleenkäytettävyyden.

Rekvisiitta välittäminen pääkomponentissa
Käytä pääkomponentin mallissav-bindtai lyhenne:Tietojen sitominen:

  1. <template>
  2. <ChildComponent :my-prop="parentData" />
  3. </template>

tässä,:my-propOsoittaa, että tämä on dynaamisesti sidottu tuki,parentDataOnko pääkomponentissa määritetty data

Miten saada rekvisiitta lapsikomponentissa
Käytä lapsikomponentissadefinePropsIlmoita vastaanotetuista rekvisiittauksista:

  1. <script setup>
  2. import { defineProps } from 'vue';
  3. const props = defineProps({
  4. myProp: String
  5. });
  6. </script>

olla olemassa<script setup>Syntaktisessa sokerissadefinePropsPaljastaa rekvisiitta automaattisesti komponentin responsiivisina ominaisuuksina

Lapsi siirtää tapahtuman vanhemmalle (Emit)

mitä säteilee
Emit on mekanismi, jolla alikomponentit lähettävät viestejä yläkomponenteille.Vue 3:ssa käytädefineEmitsAPI ilmoittaa tapahtumia, jotka voidaan lähettää, ja käyttääemittoiminto käynnistää tapahtumia.

Tapahtuman käynnistäminen lapsikomponentissa
Käytä lapsikomponentin menetelmässä defineEmits julistaa tapahtumia, jotka voidaan lähettää, ja käyttää emit laukaista:

  1. <script setup>
  2. import { defineEmits } from 'vue';
  3. const emit = defineEmits(['my-event']);
  4. function triggerEvent() {
  5. emit('my-event', dataToPass);
  6. }
  7. </script>

defineEmitskäytetään ilmoittamaan tapahtumia, joita komponentti voi lähettää, kun taasemitToimintoja käytetään näiden tapahtumien käynnistämiseen.

Kuinka kuunnella lapsikomponentin tapahtumia yläkomponentissa
Pääkomponentin mallissakäyttääv-ontai lyhenne@ Lapsikomponenttien lähettämien tapahtumien kuunteleminen:

  1. <template>
  2. <ChildComponent @my-event="handleEvent" />
  3. //或者<ChildComponent v-on:my-event="handleEvent" />
  4. </template>

tässä,@my-eventOsoittaa, että kuuntelualikomponentti lähettäämy-eventtapahtuma,handleEventSe on pääkomponentissa määritetty menetelmä Kun tapahtuma laukaistaan, tätä menetelmää kutsutaan.

Kattava esimerkki

Oletetaan, että siinä on emokomponenttiParentComponentja alikomponenttiChildComponent, pääkomponentin on välitettävä tiedot alikomponentille ja alikomponentin on ilmoitettava pääkomponentille tietyn toiminnon jälkeen.

emokomponenttiParentComponent.vue

  1. <template>
  2. <ChildComponent :my-prop="parentData" @child-event="handleChildEvent" />
  3. </template>
  4. <script setup>
  5. import { ref } from 'vue';
  6. import ChildComponent from './ChildComponent.vue';
  7. const parentData = ref('initial data');
  8. const handleChildEvent = (data) => {
  9. console.log('Received data from child:', data);
  10. };
  11. </script>

OsakokoonpanoChildComponent.vue

  1. <template>
  2. <button @click="sendDataToParent">Send Data to Parent</button>
  3. </template>
  4. <script setup>
  5. import { defineProps, defineEmits } from 'vue';
  6. const props = defineProps({
  7. myProp: String
  8. });
  9. const emit = defineEmits(['child-event']);
  10. function sendDataToParent() {
  11. emit('child-event', props.myProp);
  12. }
  13. </script>

Tässä esimerkissä pääkomponentti läpäisee:my-propVälitä tiedot lapsikomponenteille ja hyväksy@child-event Kuuntele lapsikomponenttien lähettämiä tapahtumia.lapsikomponentti kulkeedefinePropsVastaanottaa pääkomponentin välittämän sisällönmyPropja käytä sitä painikkeen napsautustapahtumassaemitLähetä tiedot pääkomponenttiin.

Pinian käyttäminen (Vue 3:n osavaltionhallintakirjasto)

Pinian edut ja ominaisuudet

Pinia on virallisesti suositeltu tilanhallintakirjasto Vue 3:lle. Se tarjoaa komponenttipohjaisen tavan hallita sovelluksen tilaa. Tässä on joitain Pinian tärkeimmistä eduista ja ominaisuuksista:

  • Komponentti API: Pinia ottaa käyttöön komponenttipohjaisen API:n, mikä tekee tilanhallinnan ja komponenttilogiikan erottamisesta luonnollisempaa.
  • TypeScript-tuki: Pinia on harkinnut TypeScript-tukea alusta alkaen, mikä mahdollistaa paremman tyyppipäätelmän ja editorin tuen kehitettäessä TypeScriptillä.
  • Modulaarinen: Pinian avulla voit jakaa tilan useisiin kauppoihin, ja jokainen kauppa voi itsenäisesti hallita omaa tilaansa ja logiikkaansa.
  • Composite API -yhteensopiva: Pinia on täydellisesti integroitu Vue 3:n Composition API:n kanssa, mikä tekee tilanhallinnan ja komponenttilogiikan erottamisesta luonnollisempaa.
  • Aikamatkailun virheenkorjaus: Pinia tarjoaa aikamatkustusvirheenkorjausominaisuudet, joiden avulla kehittäjät voivat helposti perääntyä ja tarkistaa tilan muutokset.
Pinian käyttöönotto ja käyttö

Aloittaaksesi Pinian käytön, sinun on ensin asennettava Pinia:

npm install pinia

Tai käytä lankaa:

yarn add pinia

Määritä sitten Pinia Vue-sovelluksessasi:

  1. import { createPinia } from 'pinia';
  2. const pinia = createPinia();
  3. app.use(pinia);

Luo kauppa:

  1. import { defineStore } from 'pinia';
  2. export const useCounterStore = defineStore('counter', () => {
  3. const count = ref(0);
  4. function increment() {
  5. count.value++;
  6. }
  7. return { count, increment };
  8. });

Käytä kauppaa komponentissa:

  1. <script setup>
  2. import { useCounterStore } from '@/stores/counter';
  3. const counterStore = useCounterStore();
  4. </script>
  5. <template>
  6. <div>
  7. <p>Count: {{ counterStore.count }}</p>
  8. <button @click="counterStore.increment">Increment</button>
  9. </div>
  10. </template>
Pinia integrointi komponenttien kanssa

Pinian integrointi komponentteihin on hyvin yksinkertaista, pääasiassa läpidefineStore toiminto myymälän luomiseksi. Komponenteissa voit käyttää suoraan tilaa ja menetelmiä myymälässä:

  1. <template>
  2. <div>
  3. <p>Count: {{ count }}</p>
  4. <button @click="increment">Increment</button>
  5. </div>
  6. </template>
  7. <script setup>
  8. import { useCounterStore } from '@/stores/counter';
  9. const counterStore = useCounterStore();
  10. const { count, increment } = storeToRefs(counterStore);
  11. //如果这里不使用storeToRefs会丢失响应式特性
  12. </script>

Yllä olevassa esimerkissä pääsemme suoraan malliincountnäyttääksesi laskurin arvon ja kutsuaksesi sitä painikkeen napsautustapahtumassaincrementMenetelmä laskurin arvon kasvattamiseksi.

Vue 3:n ainutlaatuinen viestintämenetelmä

Tarjoa/Pistä

Provide/Injectin peruskäyttö
Vue 3:ssaprovidejainjectSe on viestintämenetelmä vanhempien ja alikomponenttien välillä, jonka avulla esi-isäkomponentti voi lisätä riippuvuuden kaikkiin jälkeläiskomponentteihinsa riippumatta siitä, kuinka syvä komponenttihierarkia on.

  • antaa tietoja: Esivanhempien komponenttien käyttöprovideToiminnot antavat tietoa.
  • Lisää tiedot: jälkeläisten komponenttien käyttämäinjectToiminto syöttää tietoja.

Sovellettavat skenaariot tarjoamiseen/ruiskeeseen
providejainjectKoskee seuraavia skenaarioita:

  • Kun haluat välttää useiden kerrosten läpikäymisenpropstietoja siirrettäessä.
  • Kun haluat useiden komponenttipuun komponenttien jakavan tietoja.

Esimerkkikoodi

  1. // 祖先组件
  2. export default {
  3. setup() {
  4. const message = 'Hello from Ancestor!';
  5. provide('message', message);
  6. }
  7. }
  8. // 子孙组件
  9. export default {
  10. setup() {
  11. const message = inject('message');
  12. return { message };
  13. }
  14. }
Teleportoi

Teleportin käsite ja käyttö
TeleportSe on Vue 3:een lisätty uusi sisäänrakennettu komponentti, jonka avulla voit "lähettää" osan komponentin sisällä olevasta mallista mihin tahansa muuhun DOM:n sijaintiin.

Teleportin käyttäminen komponenttiviestintään
Teleport Sitä ei käytetä komponenttien väliseen viestintään, vaan komponenttien renderöintipaikan ohjaamiseen.mutta voit käyttääTeleportErityinen viestintämenetelmä saavutetaan renderöimällä komponentin osat pääkomponentin DOM:iin.

Esimerkkikoodi

  1. <!-- 父组件 -->
  2. <template>
  3. <div>
  4. <Teleport to="body">
  5. <ChildComponent />
  6. </Teleport>
  7. </div>
  8. </template>
  9. <!-- 子组件 -->
  10. <template>
  11. <div>Some content</div>
  12. </template>
Koostumus API

Composition API:n esittely
Vue 3 esittelee Composition API:n, joka tarjoaa uuden tavan organisoida ja käyttää uudelleen logiikkaa.kulkeasetupToiminnot antavat kehittäjille mahdollisuuden hallita komponenttien reagointitilaa ja elinkaarta joustavammin.

Käytä ref:tä ja reaktiivista komponenttien väliseen viestintään
refjareactiveSe on Compposition API:n työkalu reagoivan tiedon luomiseen.

  • refReaktiiviset viittaukset perustietotyyppien luomiseen.
  • reactiveReaktiivinen viite objektityyppien luomiseen.

Tarjoa ja lisää Composition API:ssa
Composition API:ssaprovidejainjectsallittusetupKäytetään toiminnoissa komponenttien välisen viestinnän saavuttamiseksi.

Esimerkkikoodi

  1. // 祖先组件
  2. import { provide } from 'vue';
  3. export default {
  4. setup() {
  5. const message = ref('Hello from Ancestor!');
  6. provide('message', message);
  7. }
  8. }
  9. // 子孙组件
  10. import { inject } from 'vue';
  11. export default {
  12. setup() {
  13. const message = inject('message');
  14. return { message };
  15. }
  16. }

Näiden ainutlaatuisten Vue 3:n viestintämenetelmien avulla kehittäjät voivat joustavammin järjestää komponenttien välistä viestintää ja parantaa koodin ylläpidettävyyttä ja uudelleenkäytettävyyttä.

Tee yhteenveto

Vue 3 esittelee Composition API:n, joka tuo komponenttiviestintään uutta joustavuutta ja tehokkaita ominaisuuksia. Komponenttiviestintä on avain monimutkaisten käyttöliittymien rakentamiseen käyttöliittymäkehityksessä. Se sisältää tiedonsiirron ja tapahtumien laukaisemisen ylä- ja lapsikomponenttien, sisarkomponenttien sekä esi- ja jälkeläisten komponenttien välillä. Vue 3 tarjoaa erilaisia ​​viestintämenetelmiä, mukaan lukien perinteiset props and emit -sovellukset sekä uuden Provide/Inject-, Teleport- ja Composition API:n.

Suositeltu aiheeseen liittyvä tieto

Luominen ei ole helppoa Jos tämä artikkeli auttaa sinua, voitko antaa minulle tykkäyksen?