Geben Sie die Bereitstellungs-/Injektionsfunktion für Referenzen in VueJS ein
P粉441076405
P粉441076405 2023-09-04 16:34:30
0
1
464

Ich versuche, einen typisierten Verweis aus einer übergeordneten Komponente bereitzustellen und ihn in die untergeordnete Komponente einzufügen.

Ich bin nicht sicher, ob ich die VueJS-Dokumentation verstehe, aber das ist es, was ich mir ausgedacht habe.

import type { Ref } from 'vue' Importtyp {InjectionKey} aus 'vue' Importieren Sie den Typ DocumentSet aus „@/types/DocumentSet“. const documentSet = Symbol() as InjectionKey<{ documentSet: Ref, aktualisieren: () => }> Standarddokumentsatz
exportieren

Die Aufgabe besteht also darin, ein typisiertes Objekt (in meinem Fall ein documentSet) und eine Funktion bereitzustellen, die es aktualisiert.

Jetzt habe ich in der übergeordneten Komponente diesen Code:

dsKey aus '@/injectionKeys/documentSet' importieren Importieren Sie den Typ DocumentSet aus „@/types/DocumentSet“. ... const documentSet = ref console.log('update') })

Und in der untergeordneten Komponente habe ich diesen Code:

dsKey aus '@/injectionKeys/documentSet' importieren const ds = inject(dsKey) const documentSet = ds?.documentSet

Das Problem besteht darin, dass ich das Gefühl habe, etwas falsch zu machen, da es eine Menge Standardcode gibt.Ich kann zum Beispiel nicht verstehen, warum das DS-Objekt wie folgt umgestaltet werden sollte:

const { documentSet } = ds

Ist es möglich, den Code zu kürzen, anstatt ds?.documentSet zu schreiben, insbesondere wenn ich sicher bin, dass ds vorhanden sein sollte (ohne ihn werde ich die untergeordnete Komponente nicht rendern)< ;/p>

Wenn ich const { documentSet } = inject(dsKey) schreibe, erscheint die folgende Fehlermeldung:

TS2339: Eigenschaft 'documentSet' existiert nicht für Typ '{ documentSet: Ref ;' Update: () => Ungültig '.

Die Idee besteht darin, dass ich Duplikate in untergeordneten Komponenten beseitigen möchte:

      

P粉441076405
P粉441076405

Antworte allen (1)
P粉446800329

你可以将它放入一个可组合项中,该项提供了一个处理提供的函数provde和一个处理注入的函数use*:

const CurrentDocumentSetKey = Symbol() as InjectionKey<{ documentSet: Ref, update: () => void }> export function provideCurrentDocumentSet(documentSet:DocumentSet, update: () => any){ provide(CurrentDocumentSetKey, {documentSet, update}) } export useCurrentDocumentSet(){ const ds = inject(CurrentDocumentSetKey) if (!ds) throw new Error('No current DocumentSet provided') return ds }

现在你只需要在父组件中调用provideCurrentDocumentSet(),所有子组件只需要执行以下操作:

const {documentSet, update} = useCurrentDocumentSet()

你甚至不需要导出InjectionKey,组件也不需要知道它。(例如Vuetify也是这样做的,例如这里

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!