Szabaduljon meg a Vue Prop fúrástól a Provide/Inject segítségével

A Vue többféle módot kínál az adatáramlás és az összetevők közötti kommunikáció kezelésére. Vue fejlesztőként gyakori kihívás a prop fúrás, ahol az adatokat az összetevők különböző rétegein keresztül továbbítja, ami egy összetett és kevésbé karbantartható kódbázishoz vezet.

A Vue a biztosító/injektáló mechanizmust kínálja, tiszta megoldást a támasztófúráshoz. A Provide/inject segít a szülők és a mélyen beágyazott gyermekkomponensek közötti adatkommunikáció kezelésében.

A támasztékfúrási probléma megértése

Mielőtt belemerülne a megoldás biztosítására/befecskendezésére, fontos megérteni a problémát. Prop fúrásra akkor kerül sor, ha adatokat kell átadnia egy legfelső szintű szülőkomponensből egy mélyen beágyazott alárendelt komponensnek.

A hierarchia közbenső összetevőinek fogadniuk és továbbítaniuk kell az adatokat, még akkor is, ha maguk nem használják azokat. Ha adatokat szeretne átadni egy szülőkomponensről egy alárendelt összetevőnek, ezeket az adatokat kellékként kell átadnia a Vue-összetevőknek.

Tekintsük példaként a következő összetevő-hierarchiát:

Tegyük fel, hogy az App komponens adatainak el kell jutniuk a GrandChildComponenthez. Ebben az esetben át kell adnia a két köztes összetevőn a kellékek segítségével, még akkor is, ha ezeknek az összetevőknek nincs szükségük magukra az adatokra a megfelelő működéshez. Ez felduzzadt kódhoz vezethet, amelyet nehezebb hibakeresni.

Mi az a beadás/injektálás?

A Vue ezt a problémát a biztosító/befecskendező funkcióval oldja meg, amely lehetővé teszi a szülőkomponens számára, hogy adatokat vagy funkciókat biztosítson leszármazott összetevőinek, függetlenül attól, hogy milyen mélyen vannak beágyazva. Ez a megoldás leegyszerűsíti az adatmegosztást és javítja a kódszervezést.

  12 csodálatos alkalmazás az iPhone kezdőképernyőjének testreszabásához

Szolgáltató komponens

A szolgáltatói komponens adatokat vagy módszereket kíván megosztani leszármazottaival. Az adatszolgáltatás lehetőségét használja, hogy gyermekei számára elérhetővé tegye ezeket az adatokat. Íme egy példa a szolgáltatói összetevőre:

 
<template>
  <div>
    
    <ParentComponent/>
  </div>
</template>

<script setup>
import { provide } from 'vue';
import ParentComponent from './components/ParentComponent.vue';

const greeting = 'Hello from Provider';

provide('greeting', greeting);
</script>

Ez a kódblokk egy szolgáltatói összetevőt, az alkalmazást jelenít meg, amely üdvözlő változót biztosít minden leszármazott összetevőjének. Változó megadásához be kell állítania egy kulcsot. Ha a kulcsot a változóval azonos névre állítja, akkor a kód karbantartható marad.

Leszármazott komponensek

A leszármazott összetevők egy beágyazott struktúrán belüli összetevők. A megadott adatokat beilleszthetik és felhasználhatják az összetevőpéldányukban. Íme, hogyan történik:

 <script setup>
import { inject } from 'vue';

const injectedData = inject('greeting');
</script>

A leszármazott komponens beilleszti a megadott adatokat, és helyileg meghatározott változóként hozzáférhet a sablonján belül.

Most nézze meg az alábbi képet:

Ezen a képen négy komponensből álló hierarchia látható, egy gyökérkomponenssel kezdve, amely kiindulási pontként szolgál. A többi összetevő a hierarchián belül helyezkedik el, és a GrandChild komponensben végződik.

A GrandChild összetevő megkapja az App komponens által biztosított adatokat. Ezzel a mechanizmussal elkerülheti az adatok átadását a szülő és gyermek összetevőkön, mivel ezeknek az összetevőknek nincs szükségük adatokra a megfelelő működéshez.

Adatszolgáltatás alkalmazás (globális) szinten

Alkalmazásszintű adatokat adhat meg a Vue biztosít/inject funkciójával. Ez egy gyakori eset az adatok és a konfiguráció megosztására a Vue alkalmazás különböző összetevői között.

  Hogyan lehet törölni a Reddit-fiókot az alkalmazásból

Íme egy példa arra, hogyan adhat meg adatokat alkalmazásszinten:

 

import { createApp } from 'vue'
import App from './App.vue'

const globalConfig = {
  apiUrl: 'https://example.com/api',
  authKey: 'my-secret-key',
  
};

app.provide('globalConfig', globalConfig);

createApp(App).mount('#app')

Tegyük fel, hogy van egy olyan alkalmazás, amely egy globális konfigurációs objektumot igényel, amely alkalmazásprogramozási felület (API) végpontokat, felhasználói hitelesítési információkat és egyéb beállításokat tartalmaz.

Ezt úgy érheti el, hogy megadja a konfigurációs adatokat a legfelső szintű összetevőben, jellemzően a main.js fájlban, lehetővé téve, hogy más összetevők beillesszék és használják:

 <template>
  <div>
    <h1>API Settings</h1>
    <p>API URL: {{ globalConfig.apiUrl }}</p>
    <p>Authentication Key: {{ globalConfig.authKey }}</p>
  </div>
</template>

<script setup>
import { inject } from 'vue';

const globalConfig = inject('globalConfig');
</script>

A fenti összetevő az inject funkciót használja a globalConfig objektum eléréséhez, amelyet az alkalmazás globális szinten biztosít. Bármilyen tulajdonságot vagy beállítást elérhet a globalConfig alkalmazásból, ha interpolálja vagy összerendeli ezeket a tulajdonságokat különböző adat-összerendelési technikákkal a Vue-ban az összetevőn belül.

A Provide and Inject előnyei és felhasználási területei

Íme néhány előny és fontos felhasználási terület az adatszolgáltatás/injektálás funkcióhoz, amikor webalkalmazásokat hoz létre a Vue-ban.

Tisztább és nagyobb teljesítményre optimalizált kód

A biztosít/inject használatával megszünteti annak szükségességét, hogy a közbenső összetevők olyan adatokat továbbítsanak, amelyeket nem használnak. Ez tisztább és karbantarthatóbb kódot eredményez a szükségtelen prop deklarációk csökkentésével.

Ezenkívül a Vue reaktivitási rendszere biztosítja, hogy az összetevők csak akkor jelenjenek meg újra, ha függőségük megváltozik. A Provide/Inject lehetővé teszi az adatok hatékony megosztását, ami a szükségtelen újrarenderelések csökkentésével teljesítményoptimalizáláshoz vezethet.

  5 módszer a telepített csomagok eltávolítására az Ubuntuban

Továbbfejlesztett komponens tokozás

Az Adás/injektálás elősegíti a komponensek jobb kapszulázását. A gyermekkomponenseknek csak az általuk kifejezetten használt adatok miatt kell aggódniuk, így csökken a szülőkomponensek sajátos adatszerkezetétől való függésük.

Fontolja meg a dátumválasztó összetevőt, amely a honosított dátumformátum-beállításokon alapul. Ahelyett, hogy ezeket a beállításokat kellékként adná át, megadhatja őket a szülőkomponensben, és csak a dátumválasztó összetevőbe szúrhatja be őket. Ez az aggodalmak világosabb elkülönítéséhez vezet.

Függőség-injekció

A Provide/inject a függőségi injekció egyszerű formájaként szolgálhat, így a globális szolgáltatásokat és beállításokat – például API-klienseket, végpontokat, felhasználói beállításokat vagy adattárakat – könnyen elérhetővé tesz minden olyan összetevő számára, amelynek szüksége van rájuk. Ez biztosítja a konzisztens konfigurációkat az alkalmazásban.

Alapvető szempontok, amelyeket figyelembe kell venni az Adás és az injekció használatakor

Míg a beadás/injekció mechanizmus számos előnnyel jár, óvatosan kell használnia, hogy elkerülje a nem kívánt mellékhatásokat.

  • Használja az előterjesztés/injektálás funkciót a fontos adatok vagy szükséges funkciók megosztásához egy összetevő-hierarchiában, például konfigurációs vagy API-kulcsok között. Túlzott használata túl bonyolulttá teheti az összetevő kapcsolatokat.
  • Dokumentálja, hogy mit biztosít a szolgáltató összetevő, és milyen leszármazott összetevőket kell beillesztenie. Ez segít az összetevők megértésében és karbantartásában, különösen csapatban végzett munka során.
  • Legyen körültekintő a függőségi hurkok létrehozása során, ahol egy alárendelt összetevő nyújt valamit, amit a szülőkomponens beilleszt. Ez hibákhoz és váratlan viselkedéshez vezet.

A Provide/Inject a legjobb lehetőség az államigazgatásra a Vue-ban?

A Provide/inject egy másik hasznos funkció a Vue-ban az adatáramlás és az összetevők állapotának kezeléséhez. A Provide/inject megvannak a maga hátrányai. A szolgáltatás/injektálás kihívásokhoz vezethet a nagyméretű alkalmazások hibakeresésében, tesztelésében és karbantartásában.

A Pinia, a Vue hivatalos állapotkezelési keretrendszerének használata lenne a legjobb az összetett állapotok kezelésére a Vue alkalmazásban. A Pinia központosított áruházat és típusbiztos megközelítést biztosít az állapotkezeléshez, így elérhetőbbé teszi a Vue alkalmazásfejlesztést.