API Render Function
h()
Crea nodi del DOM virtuale (vnodes).
Tipo
ts// firma completa function h( type: string | Component, props?: object | null, children?: Children | Slot | Slots ): VNode // omissione delle props 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 }
I types sono semplificati per una migliore leggibilità.
Dettagli
Il primo argomento può essere una stringa (per elementi nativi) o una definizione di componente Vue. Il secondo argomento sono le props da passare, e il terzo argomento sono i figli.
Quando si crea un vnode di componente, i figli devono essere passati come funzioni slot. Può essere passata una singola funzione slot se il componente si aspetta solo lo slot predefinito. In caso contrario, gli slot devono essere passati come un oggetto di funzioni slot.
Per comodità, l'argomento delle props può essere omesso quando il figlio non è un oggetto di slot.
Esempio
Creare elementi nativi:
jsimport { h } from 'vue' // tutti gli argomenti tranne il type sono opzionali h('div') h('div', { id: 'foo' }) // sia attributi che proprietà possono essere utilizzati nelle props // Vue sceglie automaticamente il modo giusto per assegnarlo h('div', { class: 'bar', innerHTML: 'hello' }) // 'class' e 'style' supportano valori di tipo oggetto/array // come nei template h('div', { class: [foo, { bar }], style: { color: 'red' } }) // i listener degli eventi dovrebbero essere passati come onXxx h('div', { onClick: () => {} }) // i figli possono essere una stringa h('div', { id: 'foo' }, 'hello') // le props possono essere omesse quando non ce ne sono h('div', 'hello') h('div', [h('span', 'hello')]) // l'array dei figli può contenere vnodes e stringhe miste h('div', ['hello', h('span', 'hello')])
Creazione di componenti:
jsimport Foo from './Foo.vue' // passaggio di props h(Foo, { // equivalente a some-prop="ciao" someProp: 'ciao', // equivalente a @update="() => {}" onUpdate: () => {} }) // passaggio di un singolo slot predefinito h(Foo, () => 'default slot') // passaggio di slot con nome // notare che `null` è richiesto per evitare // che l'oggetto slots sia trattato come props h(MyComponent, null, { default: () => 'default slot', foo: () => h('div', 'foo'), bar: () => [h('span', 'one'), h('span', 'two')] })
Guarda anche Guide - Render Functions - Creating VNodes
mergeProps()
mergeProps()
unisce più oggetti props con una gestione speciale per alcune di esse.
Tipo
tsfunction mergeProps(...args: object[]): object
Dettagli
mergeProps()
supporta la fusione di più oggetti props con una gestione speciale per le seguenti props:class
style
- listener degli eventi
onXxx
- i listener multipli con lo stesso nome saranno uniti in un array.
Se non hai bisogno della logica dei merge e desideri delle semplici sovrascritture, puoi usare in alternativa lo spread operator (nativo degli oggetti).
Esempio
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()
Clona un vnode.
Tipo
tsfunction cloneVNode(vnode: VNode, extraProps?: object): VNode
Dettagli
Restituisce un vnode clonato, con extraProps opzionali da unire all'originale.
I vnode dovrebbero essere considerati immutabili una volta creati, e non dovresti modificare le proprietà di un vnode esistente. Al contrario, clonalo con proprietà diverse o aggiuntive.
I vnode hanno proprietà interne speciali, quindi clonarli non è semplice come utilizzare lo spread operator.
cloneVNode()
gestisce gran parte della logica interna.Esempio
jsimport { h, cloneVNode } from 'vue' const original = h('div') const cloned = cloneVNode(original, { id: 'foo' })
isVNode()
Verifica se un valore è un vnode.
Tipo
tsfunction isVNode(value: unknown): boolean
resolveComponent()
Per risolvere manualmente un componente registrato tramite il nome.
Tipo
tsfunction resolveComponent(name: string): Component | string
Dettagli
Nota: non hai bisogno di questo se puoi importare direttamente il componente.
resolveComponent()
deve essere chiamato all'interno disetup()
o della funzione di renderizzazione per risolvere il contesto corretto del componente.Se il componente non viene trovato, verrà emesso un avviso durante l'esecuzione e verrà restituita la stringa del nome.
Esempio
jsconst { h, resolveComponent } = Vue export default { setup() { const ButtonCounter = resolveComponent('ButtonCounter') return () => { return h(ButtonCounter) } } }
Guarda anche Guide - Render Functions - Components
resolveDirective()
Per risolvere manualmente una direttiva registrata per nome.
Tipo
tsfunction resolveDirective(name: string): Directive | undefined
Dettagli
Note: you do not need this if you can import the component directly.
resolveDirective()
deve essere chiamato all'interno disetup()
o della funzione di render per risolvere dal contesto corretto del componente.Se la direttiva non viene trovata, verrà emesso un avviso runtime e la funzione restituirà
undefined
.Guarda anche Guide - Render Functions - Custom Directives
withDirectives()
Per aggiungere direttive personalizzate alle vnodes.
Tipo
tsfunction withDirectives( vnode: VNode, directives: DirectiveArguments ): VNode // [Directive, value, argument, modifiers] type DirectiveArguments = Array< | [Directive] | [Directive, any] | [Directive, any, string] | [Directive, any, string, DirectiveModifiers] >
Dettagli
Incorpora un vnode esistente con direttive personalizzate. Il secondo argomento è un array di direttive personalizzate. Ogni direttiva personalizzata è rappresentata anche come un array nella forma
[Directive, value, argument, modifiers]
. Gli elementi finali dell'array possono essere omessi se non necessari.Esempio
jsimport { h, withDirectives } from 'vue' // direttiva custom const pin = { mounted() { /* ... */ }, updated() { /* ... */ } } // <div v-pin:top.animate="200"></div> const vnode = withDirectives(h('div'), [ [pin, 200, 'top', { animate: true }] ])
Guarda anche Guide - Render Functions - Custom Directives
withModifiers()
Per aggiungere i modificatori v-on
nativi a una funzione gestore degli eventi.
Tipo
tsfunction withModifiers(fn: Function, modifiers: string[]): Function
Esempio
jsimport { h, withModifiers } from 'vue' const vnode = h('button', { // equivalente di v-on:click.stop.prevent onClick: withModifiers(() => { // ... }, ['stop', 'prevent']) })
Guarda anche Guida - Render Functions - Event Modifiers