Render Function APIs
h()
Tworzy wirtualne węzły DOM (vnodes).
Typ
ts// pełne oznaczenie function h( type: string | Component, props?: object | null, children?: Children | Slot | Slots ): VNode // Pomijanie propsów function h(type: string | Component, children?: Children | Slot): VNode type Children = string | number | boolean | VNode | null | Children[] type Slot = () => Children type Slots = { [name: string]: Slot }
Typy zostały uproszczone w celu zwiększenia czytelności.
Szczegóły
Pierwszy argument może być ciągiem znaków (dla elementów natywnych) lub definicją komponentu Vue. Drugi argument to właściwości, które mają zostać przekazane, a trzeci argument to elementy podrzędne.
Podczas tworzenia vnode komponentu elementy podrzędne muszą zostać przekazane jako funkcje slotów. Pojedyncza funkcja slotu może zostać przekazana, jeśli komponent oczekuje tylko domyślnego slotu. W przeciwnym razie sloty muszą zostać przekazane jako obiekt funkcji slotów.
Dla wygody argument props można pominąć, jeśli elementy podrzędne nie są obiektami slotów.
Przykład
Tworzenie elementów natywnych:
jsimport { h } from 'vue' // wszystkie argumenty poza typem są opcjonalne h('div') h('div', { id: 'foo' }) // atrybuty i właściwości mogą być używane w rekwizytach // Vue automatycznie wybiera właściwy sposób ich przypisania h('div', { class: 'bar', innerHTML: 'hello' }) // klasa i styl mają ten sam obiekt / tablicę // obsługa wartości jak w szablonach h('div', { class: [foo, { bar }], style: { color: 'red' } }) // nasłuchiwacze zdarzeń powinni być przekazywani jako onXxx h('div', { onClick: () => {} }) // dzieci mogą być ciągiem znaków h('div', { id: 'foo' }, 'hello') // właściwości można pominąć, gdy nie ma żadnych właściwości h('div', 'hello') h('div', [h('span', 'hello')]) // tablica dzieci może zawierać mieszane węzły wirtualne i ciągi znaków h('div', ['hello', h('span', 'hello')])
Tworzenie komponentów:
jsimport Foo from './Foo.vue' // przekazywanie propsów h(Foo, { // odpowiednik some-prop="hello" someProp: 'hello', // odpowiednik @update="() => {}" onUpdate: () => {} }) // przekazywanie pojedynczego domyślnego slotu h(Foo, () => 'default slot') // przekazywanie nazwanych slotów // zauważ, że `null` jest wymagane, aby uniknąć // traktowania obiektu slotów jako rekwizytów h(MyComponent, null, { default: () => 'default slot', foo: () => h('div', 'foo'), bar: () => [h('span', 'one'), h('span', 'two')] })
Zobacz także Przewodnik - Funkcje renderujące - Tworzenie węzłów wirtualnych
mergeProps()
Scalanie wielu obiektów rekwizytów ze specjalnym traktowaniem niektórych rekwizytów.
Typ
tsfunction mergeProps(...args: object[]): object
Szczegóły
mergeProps()
obsługuje scalanie wielu obiektów props ze specjalnym traktowaniem następujących props:class
style
onXxx
event listeners - wiele obiektów listener o tej samej nazwie zostanie scalonych w tablicę.
Jeśli nie potrzebujesz zachowania scalania i chcesz prostych nadpisów, możesz użyć natywnego rozprzestrzeniania obiektów.
Przykład
jsimport { mergeProps } from 'vue' const one = { class: 'foo', onClick: handlerA } const two = { class: { bar: true }, onClick: handlerB } const merged = mergeProps(one, two) /** { class: 'foo bar', onClick: [handlerA, handlerB] } */
cloneVNode()
Klonuje vnode.
Typ
tsfunction cloneVNode(vnode: VNode, extraProps?: object): VNode
Szczegóły
Zwraca sklonowany vnode, opcjonalnie z dodatkowymi właściwościami do scalenia z oryginałem.
Vnode powinny być uważane za niezmienne po utworzeniu i nie należy mutować właściwości istniejącego vnode. Zamiast tego należy go sklonować z innymi / dodatkowymi właściwościami.
Vnode mają specjalne właściwości wewnętrzne, więc ich klonowanie nie jest tak proste jak rozprzestrzenianie obiektu.
cloneVNode()
obsługuje większość wewnętrznej logiki.Przykład
jsimport { h, cloneVNode } from 'vue' const original = h('div') const cloned = cloneVNode(original, { id: 'foo' })
isVNode()
Sprawdza czy wartość jest vnode.
Typ
tsfunction isVNode(value: unknown): boolean
resolveComponent()
Do ręcznego rozwiązywania zarejestrowanego komponentu według nazwy.
Typ
tsfunction resolveComponent(name: string): Component | string
Szczegóły
Uwaga: nie jest to potrzebne, jeśli możesz zaimportować komponent bezpośrednio.
resolveComponent()
musi zostać wywołane wewnątrz albosetup()
albo funkcji renderowania, aby rozwiązać z prawidłowego kontekstu komponentu.Jeśli komponent nie zostanie znaleziony, zostanie wyemitowane ostrzeżenie w czasie wykonywania, a ciąg nazw zostanie zwrócony.
Przykład
jsimport { h, resolveComponent } from 'vue' export default { setup() { const ButtonCounter = resolveComponent('ButtonCounter') return () => { return h(ButtonCounter) } } }
Zobacz także Przewodnik - Funkcje renderowania - Komponenty
resolveDirective()
Do ręcznego rozwiązywania zarejestrowanej dyrektywy według nazwy.
Typ
tsfunction resolveDirective(name: string): Directive | undefined
Szczegóły
Uwaga: nie jest to potrzebne, jeśli możesz zaimportować dyrektywę bezpośrednio.
resolveDirective()
musi zostać wywołane wewnątrz albo setup()
albo funkcji render, aby rozwiązać z właściwego kontekstu komponentu.
Jeśli dyrektywa nie zostanie znaleziona, zostanie wyemitowane ostrzeżenie w czasie wykonywania, a funkcja zwróci undefined
.
withDirectives()
Do dodawania niestandardowych dyrektyw do vnode'ów.
Typ
tsfunction withDirectives( vnode: VNode, directives: DirectiveArguments ): VNode // [Dyrektywa, wartość, argument, modyfikatory] type DirectiveArguments = Array< | [Directive] | [Directive, any] | [Directive, any, string] | [Directive, any, string, DirectiveModifiers] >
Szczegóły
Owija istniejący vnode niestandardowymi dyrektywami. Drugi argument to tablica niestandardowych dyrektyw. Każda niestandardowa dyrektywa jest również reprezentowana jako tablica w formie
[Dyrektywa, wartość, argument, modyfikatory]
. Elementy końcowe tablicy można pominąć, jeśli nie są potrzebne.Przykład
jsimport { h, withDirectives } from 'vue' // dyrektywa niestandardowa const pin = { mounted() { /* ... */ }, updated() { /* ... */ } } // <div v-pin:top.animate="200"></div> const vnode = withDirectives(h('div'), [ [pin, 200, 'top', { animate: true }] ])
Zobacz także Przewodnik - Funkcje renderowania - Dyrektywy niestandardowe
withModifiers()
Aby dodać wbudowane modyfikatory v-on
do funkcji obsługi zdarzeń.
Typ
tsfunction withModifiers(fn: Function, modifiers: string[]): Function
Przykład
jsimport { h, withModifiers } from 'vue' const vnode = h('button', { // odpowiednik v-on:click.stop.prevent onClick: withModifiers(() => { // ... }, ['stop', 'prevent']) })
Zobacz także Przewodnik - Funkcje renderowania - Modyfikatory zdarzeń