Options API: Kompozice
provide
Poskytujte hodnoty, které mohou být implementovány potomky komponent.
Typ
tsinterface ComponentOptions { provide?: object | ((this: ComponentPublicInstance) => object) }Podrobnosti
provideainjectse používají společně, aby umožnili komponentě předka fungovat jako injektor závislostí pro všechny své potomky, bez ohledu na to, jak hluboká je hierarchie komponent, dokud jsou ve stejném rodičovském řetězci.Volba
provideby měla být buď objekt nebo funkce, která vrací objekt. Tento objekt obsahuje vlastnosti, které jsou dostupné pro vkládání do komponent potomků. V tomto objektu můžete použít klíče typu Symbol.Příklad
Základní použití:
jsconst s = Symbol() export default { provide: { foo: 'foo', [s]: 'bar' } }Použití funkce pro poskytování stavu pro každou komponentu:
jsexport default { data() { return { msg: 'foo' } } provide() { return { msg: this.msg } } }Mějte na paměti, že výše uvedená poskytnutá hodnota
msgnebude reaktivní. Pro více informací se podívejte na Práci s reaktivitou.Viz také: Provide / Inject
inject
Deklaruje vlastnosti, které se mají implementovat do aktuální komponenty vyhledáváním z poskytovatelů v hierarchii předků.
Typ
tsinterface ComponentOptions { inject?: ArrayInjectOptions | ObjectInjectOptions } type ArrayInjectOptions = string[] type ObjectInjectOptions = { [key: string | symbol]: | string | symbol | { from?: string | symbol; default?: any } }Podrobnosti
Volba
injectby měla být buď:- Pole řetězců, nebo
- Objekt, kde klíče jsou názvy místních vazeb a hodnota je buď:
- Klíč (string nebo Symbol), který se má vyhledat v dostupných injections, nebo
- Objekt, kde:
- Vlastnost
fromje klíč (string nebo Symbol), který se má vyhledat v dostupných injections, a - Vlastnost
defaultse používá jako fallback hodnota. Podobně jako u výchozích hodnot props, pro objektové typy je třeba použít tovární funkci, aby se zabránilo sdílení hodnot mezi více instancemi komponent.
- Vlastnost
Implementovaná vlastnost bude
undefined, pokud nebyla poskytnuta odpovídající vlastnost ani výchozí hodnota.Všimněte si, že vazby implementovaných hodnot nejsou reaktivní. To je záměrné. Nicméně, pokud je vložená hodnota reaktivní objekt, vlastnosti tohoto objektu zůstávají reaktivní. Pro více informací se podívejte na Práci s reaktivitou.
Příklad
Základní použití:
jsexport default { inject: ['foo'], created() { console.log(this.foo) } }Použití implementované hodnoty jako výchozí hodnoty pro vlastnost (prop):
jsconst Child = { inject: ['foo'], props: { bar: { default() { return this.foo } } } }Použití implementované hodnoty jako vstupu do dat:
jsconst Child = { inject: ['foo'], data() { return { bar: this.foo } } }Implementace může být volitelná s výchozí hodnotou:
jsconst Child = { inject: { foo: { default: 'foo' } } }Pokud je třeba implementovat hodnotu z vlastnosti s jiným názvem, použijte pro označení zdrojové vlastnosti
from:jsconst Child = { inject: { foo: { from: 'bar', default: 'foo' } } }Podobně jako u výchozích hodnot vlastností, pro neprimitivní hodnoty je třeba použít tovární funkci:
jsconst Child = { inject: { foo: { from: 'bar', default: () => [1, 2, 3] } } }Viz také: Provide / Inject
mixins
Pole objektů s možnostmi (options), které se mají smíchat do aktuální komponenty.
Typ
tsinterface ComponentOptions { mixins?: ComponentOptions[] }Detaily
Volba
mixinspřijímá pole mixin objektů. Tyto objekty mohou obsahovat volby instance (instance options) jako normální objekty instance (instance objects) a budou sloučeny do konečné podoby pomocí určité logiky sloučení volby. Například, pokud váš mixin obsahujecreatedhook a sama komponenta také, budou volány obě funkce.Hooks pro mixins jsou volány v pořadí, v jakém jsou poskytnuty, a před hooks samotného komponentu.
Už není doporučeno
Ve Vue 2 byly mixinové funkce hlavním mechanismem pro vytváření znovupoužitelných částí logiky komponenty. Ačkoli jsou mixinové funkce ve Vue 3 nadále podporovány, nyní jsou preferovaným přístupem pro znovupoužití kódu mezi komponentami composable funkce pomocí Composition API.
- Příklad
jsconst mixin = { created() { console.log(1) } } createApp({ created() { console.log(2) }, mixins: [mixin] }) // => 1 // => 2
extends
„Základní třída“ komponenty, ze které se dědí.
- Typ
ts
interface ComponentOptions {
extends?: ComponentOptions
}Detaily
Umožňuje jedné komponentě rozšířit jinou a zdědit její možnosti.
Z implementačního hlediska je
extendstéměř identické jakomixins. S komponentou specifikovanou pomocíextendsbude zacházeno tak, jako by byla prvním mixinem.Nicméně,
extendsamixinsvyjadřují různé záměry. Volbamixinsse především používá k sestavování částí funkcionality, zatímcoextendsse především zabývá dědičností.Stejně jako u
mixinsbudou jakékoli možnosti (kroměsetup()) sloučeny pomocí příslušné strategie pro sloučení.Příklad
js
const CompA = { ... }
const CompB = {
extends: CompA,
...
}Nedoporučeno pro Composition API
extends je navrženo pro Options API a neřeší sloučení hooku setup().
V Composition API je preferovaný mentální model pro znovupoužití logiky „kompozice“ před „dědičností“. Pokud máte logiku z komponenty, kterou chcete znovu použít v jiné komponentě, zvažte extrakci příslušné logiky do composable objektu.
Pokud stále chcete „rozšířit“ komponentu pomocí Composition API, můžete zavolat setup() základní komponenty v setup() rozšiřující komponenty:
js
import Base from './Base.js'
export default {
extends: Base,
setup(props, ctx) {
return {
...Base.setup(props, ctx),
// místní vazby
}
}
}