Osvoboďte se od Vue Prop Drilling with Provide/Inject

Vue nabízí několik způsobů řízení datového toku a komunikace mezi komponentami. Běžnou výzvou pro vývojáře Vue je prop drilling, kdy předáváte data přes různé vrstvy komponent, což vede ke složité a méně udržovatelné kódové základně.

Vue nabízí mechanismus pro zajištění/vstřikování, čisté řešení pro vrtání podpěr. Poskytovat/vkládat pomáhá řídit datovou komunikaci mezi rodiči a hluboce vnořenými podřízenými komponentami.

Pochopení problému podpěrného vrtání

Než se ponoříte do řešení poskytování/vstřikování, je důležité porozumět problému. Prop drilling nastane, když potřebujete předat data z nadřazené komponenty nejvyšší úrovně dolů do hluboce vnořené podřízené komponenty.

Mezilehlé komponenty v této hierarchii potřebují přijímat a předávat data, i když je samy nepoužívají. Chcete-li předat data z nadřazené komponenty do podřízené komponenty, budete muset tato data předat jako rekvizity do vašich komponent Vue.

Jako příklad zvažte následující hierarchii komponent:

Předpokládejme, že data z komponenty App musí dosáhnout GrandChildComponent. V takovém případě byste jej museli předat dvěma mezilehlými komponentami pomocí rekvizit, i když tyto komponenty samy o sobě nepotřebují data ke správnému fungování. To může vést k nabubřelému kódu, který se hůře ladí.

Co je poskytovat/injektovat?

Vue řeší tento problém pomocí funkce poskytnout/vložit, která umožňuje nadřazené komponentě poskytovat data nebo funkce svým podřízeným komponentám bez ohledu na to, jak hluboko jsou vnořené. Toto řešení zjednodušuje sdílení dat a zlepšuje organizaci kódu.

  Fix Zoom Unstable Internet Connection Error

Komponenta poskytovatele

Komponenta poskytovatele má v úmyslu sdílet data nebo metody se svými potomky. Ke zpřístupnění těchto údajů svým dětem využívá možnost poskytnout. Zde je příklad komponenty poskytovatele:

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

Tento blok kódu zobrazuje komponentu poskytovatele, App, která poskytuje proměnnou pozdravu všem svým podřízeným komponentám. Chcete-li poskytnout proměnnou, musíte nastavit klíč. Nastavení klíče na stejný název jako proměnná pomáhá udržovat váš kód udržovatelný.

Potomkové komponenty

Potomkové komponenty jsou komponenty uvnitř vnořené struktury. Mohou vkládat a používat poskytnutá data ve své instanci komponenty. Zde je návod, jak se to dělá:

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

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

Podřízená komponenta vkládá poskytnutá data a může k nim přistupovat v rámci své šablony jako lokálně definované proměnné.

Nyní zvažte obrázek níže:

Na tomto obrázku můžete vidět hierarchii čtyř komponent, počínaje kořenovou komponentou, která slouží jako výchozí bod. Ostatní komponenty jsou vnořeny do hierarchie a končí komponentou GrandChild.

Komponenta GrandChild přijímá data, která poskytuje komponenta App. S tímto mechanismem se můžete vyhnout předávání dat přes rodičovské a podřízené komponenty, protože tyto komponenty nepotřebují data ke správnému fungování.

Poskytování dat na úrovni aplikace (globální).

Data můžete poskytnout na úrovni aplikace pomocí Vue poskytnout/vložit. Toto je běžný případ použití pro sdílení dat a konfigurace napříč různými komponentami v rámci vaší aplikace Vue.

  Jak omezit data v Tabulkách Google pomocí ověření dat

Zde je příklad toho, jak můžete poskytnout data na úrovni aplikace:

 

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

Předpokládejme, že máte aplikaci, která vyžaduje objekt globální konfigurace obsahující koncové body rozhraní API (Application Programming Interface), informace o ověření uživatele a další nastavení.

Toho můžete dosáhnout poskytnutím konfiguračních dat v komponentě nejvyšší úrovně, obvykle ve vašem souboru main.js, což umožní ostatním komponentám je vložit a použít:

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

Výše uvedená komponenta používá funkci inject pro přístup k objektu globalConfig, který aplikace poskytuje na globální úrovni. Můžete přistupovat k jakýmkoli vlastnostem nebo nastavením z globalConfig interpolací nebo vázáním těchto vlastností s různými technikami vázání dat ve Vue v rámci komponenty.

Výhody a použití funkce Provide and Inject

Zde jsou některé výhody a důležitá použití funkce poskytnout/vložit při vytváření webových aplikací ve Vue.

Čistší a výkonnější optimalizovaný kód

Pomocí poskytování/vkládání odstraníte potřebu zprostředkujících komponent předávat data, která nepoužívají. Výsledkem je čistší a lépe udržovatelný kód snížením zbytečných deklarací prop.

Systém reaktivity Vue také zajišťuje, že komponenty se znovu vykreslí pouze tehdy, když se změní jejich závislosti. Poskytování/vkládání umožňuje efektivní sdílení dat, což může vést k optimalizaci výkonu snížením zbytečných opakovaných vykreslování.

  Jak vypnout automatické opravy na Androidu

Vylepšené zapouzdření součástí

Poskytování/vstřikování podporuje lepší zapouzdření součástí. Podřízené komponenty se musí starat pouze o data, která explicitně používají, což snižuje jejich závislost na specifické datové struktuře nadřazených komponent.

Zvažte komponentu pro výběr data, která se spoléhá na lokalizované nastavení formátu data. Namísto předávání těchto nastavení jako rekvizit je můžete poskytnout v rámci nadřazené komponenty a vložit je pouze do komponenty pro výběr data. To vede k jasnějšímu oddělení obav.

Injekce závislosti

Poskytnout/vložit může sloužit jako jednoduchá forma vkládání závislostí, díky čemuž jsou globální služby a nastavení – jako jsou klienti API, koncové body, uživatelské preference nebo úložiště dat – snadno dostupné pro jakoukoli komponentu, která je potřebuje. To zajišťuje konzistentní konfigurace napříč vaší aplikací.

Základní body, které je třeba zvážit při používání funkce Provide and Inject

I když mechanismus poskytování/vstřikování nabízí mnoho výhod, měli byste jej používat opatrně, abyste se vyhnuli nežádoucím vedlejším účinkům.

  • Použijte funkci poskytnout/vložit pro sdílení důležitých dat nebo funkcí potřebných v hierarchii komponent, jako je konfigurace nebo klíče API. Jeho nadměrné používání může způsobit, že vztahy mezi komponenty budou příliš složité.
  • Zdokumentujte, co poskytuje komponenta poskytovatele a jaké podřízené komponenty by měly vložit. To pomáhá pochopit a udržovat vaše komponenty, zejména při práci v týmech.
  • Buďte opatrní při vytváření smyček závislostí, kde podřízená komponenta poskytuje něco, co vkládá nadřazená komponenta. To povede k chybám a neočekávanému chování.

Je Provide/Inject nejlepší volbou pro státní správu ve Vue?

Poskytnout/vložit je další užitečná funkce ve Vue pro správu toku dat a stavu v rámci komponent. Poskytování/vstřikování má svůj podíl na nevýhodách. Poskytování/vkládání může vést k problémům při ladění, testování a údržbě rozsáhlých aplikací.

Ke zpracování složitých stavů ve vaší aplikaci Vue by bylo nejlepší použít Pinia, oficiální rámec správy státu Vue. Pinia poskytuje centralizovaný obchod a typově bezpečný přístup ke správě státu, díky čemuž je vývoj aplikací Vue dostupnější.