Options: Composition
provide
Zapewnia wartości, które mogą być wstrzykiwane przez komponenty potomne.
Typ
tsinterface ComponentOptions { provide?: object | ((this: ComponentPublicInstance) => object) }Szczegóły
provideiinjectsą używane razem, aby umożliwić komponentowi przodkowi służyć jako wstrzykiwacz zależności dla wszystkich jego komponentów potomnych, niezależnie od tego, jak głęboka jest hierarchia komponentów, o ile znajdują się one w tym samym łańcuchu nadrzędnym.Opcja
providepowinna być obiektem lub funkcją zwracającą obiekt. Obiekt ten zawiera właściwości, które są dostępne do wstrzyknięcia do jego elementów potomnych. Można używać symboli jako kluczy w tym obiekcie.Przykład
Podstawowe użycie:
jsconst s = Symbol() export default { provide: { foo: 'foo', [s]: 'bar' } }Używanie funkcji do zapewnienia stanu poszczególnych komponentów:
jsexport default { data() { return { msg: 'foo' } } provide() { return { msg: this.msg } } }W powyższym przykładzie dostarczony
msgNIE będzie reaktywny. Zobacz Working with Reactivity po więcej szczegółów.Zobacz także Provide / Inject
inject
Deklaruje właściwości do wstrzyknięcia do bieżącego komponentu poprzez zlokalizowanie ich od dostawców nadrzędnych.
Typ
tsinterface ComponentOptions { inject?: ArrayInjectOptions | ObjectInjectOptions } type ArrayInjectOptions = string[] type ObjectInjectOptions = { [key: string | symbol]: | string | symbol | { from?: string | symbol; default?: any } }Szczegóły
Opcja
injectpowinna być albo:- Tablica ciągów znaków, lub
- Obiektem, w którym kluczami są lokalne nazwy wiązań, a wartością jest albo:
- Klucz (ciąg lub symbol) do wyszukania w dostępnych wstrzyknięciach, lub
- Obiekt, w którym:
- właściwość
fromjest kluczem (ciąg lub Symbol) do wyszukania w dostępnych zastrzykach, oraz - właściwość
defaultjest używana jako wartość awaryjna. Podobnie jak w przypadku wartości domyślnych rekwizytów, funkcja fabryki jest potrzebna dla typów obiektów, aby uniknąć współdzielenia wartości między wieloma instancjami komponentów.
- właściwość
Wstrzyknięta właściwość będzie „niezdefiniowana”, jeśli nie podano ani pasującej właściwości, ani wartości domyślnej.
Należy pamiętać, że wstrzyknięte wiązania NIE są reaktywne. Jest to zamierzone. Jeśli jednak wstrzyknięta wartość jest obiektem reaktywnym, właściwości tego obiektu pozostają reaktywne. Więcej szczegółów można znaleźć w Working with Reactivity.
Przykład
Podstawowe użycie:
jsexport default { inject: ['foo'], created() { console.log(this.foo) } }Używanie wstrzykniętej wartości jako domyślnej dla właściwości:
jsconst Child = { inject: ['foo'], props: { bar: { default() { return this.foo } } } }Używanie wstrzykniętej wartości do wprowadzania danych:
jsconst Child = { inject: ['foo'], data() { return { bar: this.foo } } }Wartości podane w inject mogą być opcjonalne z wartością domyślną:
jsconst Child = { inject: { foo: { default: 'foo' } } }Jeśli musi zostać wstrzyknięty z właściwości o innej nazwie, należy użyć
from, aby wskazać właściwość źródłową:jsconst Child = { inject: { foo: { from: 'bar', default: 'foo' } } }Podobnie jak w przypadku wartości domyślnych propsów, należy użyć funkcji fabrycznej dla wartości nieprymitywnych:
jsconst Child = { inject: { foo: { from: 'bar', default: () => [1, 2, 3] } } }Zobacz także Provide / Inject
mixins
Tablica obiektów opcji, które mają zostać dodane do bieżącego komponentu.
Typ
tsinterface ComponentOptions { mixins?: ComponentOptions[] }Szczegóły
Opcja
mixinsakceptuje tablicę obiektów mixin. Te obiekty mixin mogą zawierać opcje instancji, tak jak normalne obiekty instancji, i zostaną one połączone z ewentualnymi opcjami przy użyciu określonej logiki łączenia opcji. Na przykład, jeśli twój mixin zawiera hookcreated, a sam komponent również go posiada, obie funkcje zostaną wywołane.Haki mixin są wywoływane w kolejności, w jakiej zostały dostarczone i przed własnymi hakami komponentu.
nie jest już zalecane
W Vue 2, mixiny były podstawowym mechanizmem tworzenia fragmentów logiki komponentu wielokrotnego użytku. Podczas gdy mixiny są nadal obsługiwane w Vue 3, Composable functions using Composition API jest obecnie preferowanym podejściem do ponownego użycia kodu między komponentami.
Przykład
jsconst mixin = { created() { console.log(1) } } createApp({ created() { console.log(2) }, mixins: [mixin] }) // => 1 // => 2
extends
Komponent „klasy bazowej” do rozszerzenia.
Typ
tsinterface ComponentOptions { extends?: ComponentOptions }Szczegóły
Pozwala jednemu komponentowi rozszerzyć inny, dziedzicząc jego opcje.
Z perspektywy implementacji,
extendsjest prawie identyczne jakmixins. Komponent określony przezextendsbędzie traktowany tak, jakby był pierwszym mixinem.Jednakże,
extendsimixinswyrażają różne intencje. Opcjamixinsjest głównie używana do komponowania fragmentów funkcjonalności, podczas gdyextendsdotyczy głównie dziedziczenia.Podobnie jak w przypadku
mixins, wszystkie opcje (z wyjątkiemsetup()) zostaną połączone przy użyciu odpowiedniej strategii łączenia.Przykład
jsconst CompA = { ... } const CompB = { extends: CompA, ... }Nie zalecane dla Composition API
extendsjest zaprojektowany dla Options API i nie obsługuje łączenia metodsetup().W Composition API preferowanym modelem mentalnym dla ponownego użycia logiki jest „kompozycja”, a nie „dziedziczenie”. Jeśli masz logikę z komponentu, która musi być ponownie użyta w innym, rozważ wyodrębnienie odpowiedniej logiki do Composable.
Jeśli nadal zamierzasz „rozszerzyć” komponent za pomocą Composition API, możesz wywołać
setup()komponentu bazowego wsetup()komponentu rozszerzającego:jsimport Base from './Base.js' export default { extends: Base, setup(props, ctx) { return { ...Base.setup(props, ctx), // powiązania lokalne } } }