Render Function APIs â
h() â
āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ DOM āύā§āĻĄ (vnodes) āϤā§āϰāĻŋ āĻāϰā§āĨ¤
āĻĒā§āϰāĻāĻžāϰ
ts// full signature function h( type: string | Component, props?: object | null, children?: Children | Slot | Slots ): VNode // omitting 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 }
āĻāĻžāĻāĻĒāĻā§āϞāĻŋ āϰāĻŋāĻĄāĻŋāĻŦāĻŋāϞāĻŋāĻāĻŋāϰ āĻāύā§āϝ āϏāϰāϞā§āĻā§āϤāĨ¤
āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ
āĻĒā§āϰāĻĨāĻŽ āĻāϰāĻā§āĻŽā§āύā§āĻāĻāĻŋ āĻšāϝāĻŧ āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻ (āύā§āĻāĻŋāĻ āĻāϞāĻŋāĻŽā§āύā§āĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ) āĻŦāĻž āĻāĻāĻāĻŋ Vue āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻĄā§āĻĢāĻŋāύā§āĻāĻļāύ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻāϰāĻā§āĻŽā§āύā§āĻāĻāĻŋ āĻšāϞ āĻĒā§āϰāĻĒāϏ āĻĒāĻžāϏ āĻāϰāĻž, āĻāĻŦāĻ āϤā§āϤā§āϝāĻŧ āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻšāϞ āĻāĻŋāϞā§āĻĄā§āύāĨ¤
āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ vnode āϤā§āϰāĻŋ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻŋāϞā§āĻĄā§āύāĻā§ āϏā§āϞāĻ āĻĢāĻžāĻāĻļāύ āĻšāĻŋāϏāĻžāĻŦā§ āĻĒāĻžāϏ āĻāϰāĻž āĻāĻŦāĻļā§āϝāĻ. āĻāĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϞ āϏā§āϞāĻ āĻĢāĻžāĻāĻļāύ āĻĒāĻžāϏ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āϝāĻĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĄāĻŋāĻĢāϞā§āĻ āϏā§āϞāĻ āĻāĻā§āϏāĻĒā§āĻā§āĻ āĻāϰā§āĨ¤ āĻ āύā§āϝāĻĨāĻžāϝāĻŧ, āϏā§āϞāĻāĻā§āϞāĻŋāĻā§ āϏā§āϞāĻ āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋāϰ āĻāĻāĻāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻĒāĻžāϏ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āϏā§āĻŦāĻŋāϧāĻžāϰ āĻāύā§āϝ, āĻĒā§āϰāĻĒāϏ āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻŦāĻžāĻĻ āĻĻā§āĻāϝāĻŧāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āϝāĻāύ āĻāĻŋāϞā§āĻĄā§āύ āϏā§āϞāĻ āĻ āĻŦāĻā§āĻā§āĻ āύāĻž āĻšāϝāĻŧāĨ¤
āĻāĻĻāĻžāĻšāϰāύ
āύā§āĻāĻŋāĻ āĻāϞāĻŋāĻŽā§āύā§āĻāϏ āϤā§āϰāĻŋ āĻāϰāĻž:
jsimport { h } from 'vue' // all arguments except the type are optional h('div') h('div', { id: 'foo' }) // both attributes and properties can be used in props // Vue automatically picks the right way to assign it h('div', { class: 'bar', innerHTML: 'hello' }) // class and style have the same object / array // value support like in templates h('div', { class: [foo, { bar }], style: { color: 'red' } }) // event listeners should be passed as onXxx h('div', { onClick: () => {} }) // children can be a string h('div', { id: 'foo' }, 'hello') // props can be omitted when there are no props h('div', 'hello') h('div', [h('span', 'hello')]) // children array can contain mixed vnodes and strings h('div', ['hello', h('span', 'hello')])
āĻāĻŽā§āĻĒā§āύā§āύā§āĻāϏ āϤā§āϰāĻŋ āĻāϰāĻž:
jsimport Foo from './Foo.vue' // passing props h(Foo, { // equivalent of some-prop="hello" someProp: 'hello', // equivalent of @update="() => {}" onUpdate: () => {} }) // passing single default slot h(Foo, () => 'default slot') // passing named slots // notice the `null` is required to avoid // slots object being treated as props h(MyComponent, null, { default: () => 'default slot', foo: () => h('div', 'foo'), bar: () => [h('span', 'one'), h('span', 'two')] })
āĻāϰ⧠āĻĻā§āĻā§āύ Guide - Render Functions - Creating VNodes
mergeProps() â
āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒā§āϰāĻĒāϏā§āϰ āĻāύā§āϝ āĻŦāĻŋāĻļā§āώ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ āϏāĻš āĻāĻāĻžāϧāĻŋāĻ āĻĒā§āϰāĻĒāϏ āĻ āĻŦāĻā§āĻā§āĻ āĻŽāĻžāϰā§āĻ āĻāϰā§āύāĨ¤
āĻĒā§āϰāĻāĻžāϰ
tsfunction mergeProps(...args: object[]): object
āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ
mergeProps()
āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒā§āϰāĻĒāϏā§āϰ āĻāύā§āϝ āĻŦāĻŋāĻļā§āώ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ āϏāĻš āĻāĻāĻžāϧāĻŋāĻ āĻĒā§āϰāĻĒāϏ āĻ āĻŦāĻā§āĻā§āĻ āĻŽāĻžāϰā§āĻāĻŋāĻ āϏāĻžāĻĒā§āϰā§āĻ āĻāϰā§:class
style
onXxx
āĻāĻā§āύā§āĻ āϞāĻŋāϏā§āύāĻžāϰ - āĻāĻāĻ āύāĻžāĻŽā§āϰ āĻāĻāĻžāϧāĻŋāĻ āϞāĻŋāϏā§āύāĻžāϰ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāϰā§āϤ⧠āĻŽāĻžāϰā§āĻ āĻšāĻŦā§āĨ¤
āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻŽāĻžāϰā§āĻ āĻŦāĻŋāĻšā§āϝā§āĻāĻŋā§āĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āϏāĻŋāĻŽā§āĻĒāϞ āĻāĻāĻžāϰāϰāĻžāĻāĻ āĻāĻžāύ, āϤāĻžāĻšāϞ⧠āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āύā§āĻāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āϏā§āĻĒā§āϰā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĻāĻžāĻšāϰāύ
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() â
āĻāĻāĻāĻŋ vnode āϤā§āϰāĻŋ āĻāϰāĻžāĨ¤
āĻĒā§āϰāĻāĻžāϰ
tsfunction cloneVNode(vnode: VNode, extraProps?: object): VNode
āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ
āĻāĻāĻāĻŋ āĻā§āϞā§āύ āĻāϰāĻž Vnode āϰāĻŋāĻāĻžāϰā§āύ āĻĻā§āϝāĻŧ, āĻ āĻĒāĻļāύāĻžāϞāĻŋ āĻ āϰāĻŋāĻāĻŋāύāĻžāϞāĻāĻŋāϰ āϏāĻžāĻĨā§ āĻŽāĻžāϰā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻā§āϏāĻā§āϰāĻž āĻĒā§āϰāĻĒāϏ āϏāĻšāĨ¤
āĻāĻāĻŦāĻžāϰ āϤā§āϰāĻŋ āĻšāϝāĻŧā§ āĻā§āϞ⧠Vnode-āĻā§āϞāĻŋāĻā§ āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϝāĻŧ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻāĻāĻŋāϤ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ vnode-āĻāϰ āĻĒā§āϰāĻĒāϏāĻā§āϞāĻŋāĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āĻāĻāĻŋāϤ āύāϝāĻŧāĨ¤ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āĻāĻāĻŋ āĻŦāĻŋāĻāĻŋāύā§āύ / āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻĒā§āϰāĻĒāϏ āĻĻāĻŋāϝāĻŧā§ āĻā§āϞā§āύ āĻāϰā§āύāĨ¤
vnode-āĻāϰ āĻŦāĻŋāĻļā§āώ āĻāύā§āĻāĻžāϰāύā§āϝāĻžāϞ āĻĒā§āϰā§āĻĒāĻžāϰā§āĻāĻŋāϏ āϰāϝāĻŧā§āĻā§, āϤāĻžāĻ āϤāĻžāĻĻā§āϰ āĻā§āϞā§āύ āĻāϰāĻž āĻāĻāĻāĻŋ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āϏā§āĻĒā§āĻĄā§āϰ āĻŽāϤ⧠āϏāĻŋāĻŽā§āĻĒāϞ āύāϝāĻŧāĨ¤
cloneVNode()
āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻāύā§āĻāĻžāϰāύā§āϝāĻžāϞ āϞāĻāĻŋāĻ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āĨ¤āĻāĻĻāĻžāĻšāϰāύ
jsimport { h, cloneVNode } from 'vue' const original = h('div') const cloned = cloneVNode(original, { id: 'foo' })
isVNode() â
āĻāĻāĻāĻŋ āĻā§āϝāĻžāϞ⧠vnode āĻāĻŋāύāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰā§.
āĻĒā§āϰāĻāĻžāϰ
tsfunction isVNode(value: unknown): boolean
resolveComponent() â
āύā§āĻāĻŽ āĻ āύā§āϏāĻžāϰ⧠āĻāĻāĻāĻŋ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻžāĻĄ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāύā§āϝāĨ¤
āĻĒā§āϰāĻāĻžāϰ
tsfunction resolveComponent(name: string): Component | string
āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ
Note: āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāĻŽā§āĻĒā§āϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϤāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāĻāĻŋāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤
resolveComponent()
āĻā§ āĻ āĻŦāĻļā§āϝāĻ āĻšāϝāĻŧsetup()
āĻ āĻĨāĻŦāĻž āϰā§āύā§āĻĄāĻžāϰ āĻĢāĻžāĻāĻļāύā§āϰ āĻāĻŋāϤāϰ⧠āĻāϞ āĻāϰāϤ⧠āĻšāĻŦā§, āϝāĻžāϤ⧠āĻāĻžāϰā§āĻā§āĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻāύā§āĻā§āĻā§āϏ āĻĨā§āĻā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤āϝāĻĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻāĻŋ āĻĒāĻžāĻāϝāĻŧāĻž āύāĻž āϝāĻžāϝāĻŧ, āĻāĻāĻāĻŋ āϰāĻžāύāĻāĻžāĻāĻŽ āϏāϤāϰā§āĻāϤāĻž āύāĻŋāϰā§āĻāϤ āĻšāĻŦā§ āĻāĻŦāĻ āύā§āĻāĻŽ āϏā§āĻā§āϰāĻŋāĻāĻāĻŋ āϰāĻŋāĻāĻžāϰā§āύ āĻĻā§āĻāϝāĻŧāĻž āĻšāĻŦā§āĨ¤
āĻāĻĻāĻžāĻšāϰāύ
jsimport { h, resolveComponent } from 'vue' export default { setup() { const ButtonCounter = resolveComponent('ButtonCounter') return () => { return h(ButtonCounter) } } }
āĻāϰ⧠āĻĻā§āĻā§āύ Guide - Render Functions - Components
resolveDirective() â
āύā§āĻāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āĻāĻāĻāĻŋ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻžāĻĄ āĻĄāĻŋāϰā§āĻā§āĻāĻŋāĻ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāύā§āϝāĨ¤
āĻĒā§āϰāĻāĻžāϰ
tsfunction resolveDirective(name: string): Directive | undefined
āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ
Note: āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāĻŽā§āĻĒā§āϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϤāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāĻāĻŋāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤
āĻāĻžāϰā§āĻā§āĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāύāĻā§āĻā§āϏ āĻĨā§āĻā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻžāϰ āĻāύā§āϝ
resolveDirective()
āĻā§ āĻ āĻŦāĻļā§āϝāĻ āĻšāϝāĻŧsetup()
āĻ āĻĨāĻŦāĻž āϰā§āύā§āĻĄāĻžāϰ āĻĢāĻžāĻāĻļāύā§āϰ āĻāĻŋāϤāϰ⧠āĻāϞ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤āϝāĻĻāĻŋ āĻĄāĻŋāϰā§āĻā§āĻāĻŋāĻāĻāĻŋ āύāĻž āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžā§, āĻāĻāĻāĻŋ āϰāĻžāύāĻāĻžāĻāĻŽ āϏāϤāϰā§āĻāϤāĻž āύāĻŋāϰā§āĻāϤ āĻšāĻŦā§, āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύāĻāĻŋ
undefined
āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤āĻāϰ⧠āĻĻā§āĻā§āύ Guide - Render Functions - Custom Directives
withDirectives() â
vnodes-āĻ āĻāĻžāϏā§āĻāĻŽ āĻĄāĻŋāϰā§āĻā§āĻāĻŋāĻ āĻ ā§āϝāĻžāĻĄ āĻāϰāĻžāϰ āĻāύā§āϝ.
āĻĒā§āϰāĻāĻžāϰ
tsfunction withDirectives( vnode: VNode, directives: DirectiveArguments ): VNode // [Directive, value, argument, modifiers] type DirectiveArguments = Array< | [Directive] | [Directive, any] | [Directive, any, string] | [Directive, any, string, DirectiveModifiers] >
āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ
āĻāĻžāϏā§āĻāĻŽ āĻĄāĻŋāϰā§āĻā§āĻāĻŋāĻāϏāĻš āĻāĻāĻāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ vnode āĻŽā§āĻĄāĻŧāĻžāύā§āĨ¤ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻāϰāĻā§āĻŽā§āύā§āĻāĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻĄāĻŋāϰā§āĻā§āĻāĻŋāĻāĻā§āϞā§āϰ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāϰā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻĄāĻŋāϰā§āĻā§āĻāĻŋāĻ
[Directive, value, argument, modifiers]
āĻāĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāϰ⧠āĻšāĻŋāϏāĻžāĻŦā§āĻ āĻāĻĒāϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϝāĻŧā§āĻāύ āύāĻž āĻšāϞ⧠āĻ ā§āϝāĻžāϰā§āϰ āĻā§āĻāϞāĻŋāĻ āĻāϞāĻŋāĻŽā§āύā§āĻāĻā§āϞāĻŋ āĻŦāĻžāĻĻ āĻĻā§āĻāϝāĻŧāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤āĻāĻĻāĻžāĻšāϰāύ
jsimport { h, withDirectives } from 'vue' // a custom directive const pin = { mounted() { /* ... */ }, updated() { /* ... */ } } // <div v-pin:top.animate="200"></div> const vnode = withDirectives(h('div'), [ [pin, 200, 'top', { animate: true }] ])
āĻāϰ⧠āĻĻā§āĻā§āύ Guide - Render Functions - Custom Directives
withModifiers() â
āĻāĻāĻāĻŋ āĻāĻā§āύā§āĻ āĻšā§āϝāĻžāύā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻāĻļāύ⧠āĻŦāĻŋāϞā§āĻ-āĻāύ v-on
modifiers āϝā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
āĻĒā§āϰāĻāĻžāϰ
tsfunction withModifiers(fn: Function, modifiers: ModifierGuardsKeys[]): Function
āĻāĻĻāĻžāĻšāϰāύ
jsimport { h, withModifiers } from 'vue' const vnode = h('button', { // equivalent of v-on:click.stop.prevent onClick: withModifiers(() => { // ... }, ['stop', 'prevent']) })
āĻāϰ⧠āĻĻā§āĻā§āύ Guide - Render Functions - Event Modifiers
GitHub-āĻ āĻāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰā§āύ