APIs da Função de Interpretação
h()
Cria nós do DOM virtual (vnodes).
Tipo
ts// assinatura completa function h( type: string | Component, props?: object | null, children?: Children | Slot | Slots ): VNode // omitindo propriedades 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 }
Os tipos foram simplificados para fins de legibilidade.
Detalhes
O primeiro argumento pode ser ou uma sequência de caracteres (para os elementos nativos) ou uma definição de componente da Vue. O segundo argumento são as propriedades à serem passadas, e o terceiro são os filhos.
Quando criamos um nó virtual de componente, os filhos devem ser passados como funções de ranhura. Uma única função de ranhura pode ser passada se o componente esperar apenas a ranhura padrão. De outro modo, as ranhuras devem ser passadas como um objeto de funções de ranhura.
Por conveniência, o argumento de propriedades pode ser omitido quando os filhos não forem um objeto de ranhuras.
Exemplo
Criando elementos nativos:
jsimport { h } from 'vue' // todos os argumentos exceto o tipo são opcionais h('div') h('div', { id: 'foo' }) // ambos atributos e propriedades podem ser usados em propriedades // a Vue escolhe automaticamente a maneira correta de atribuí-los h('div', { class: 'bar', innerHTML: 'hello' }) // `class` e `style` têm o mesmo objeto ou vetor // suporte de valor tal como nos modelos de marcação h('div', { class: [foo, { bar }], style: { color: 'red' } }) // os ouvintes de evento devem ser passados como `onXxx` h('div', { onClick: () => {} }) // os filhos podem ser uma sequência de caracteres h('div', { id: 'foo' }, 'hello') // as propriedades podem ser omitidas quando não existirem propriedades h('div', 'hello') h('div', [h('span', 'hello')]) // o vetor de filhos pode conter nós virtuais e // sequências de caracteres misturados h('div', ['hello', h('span', 'hello')])
Criando componentes:
jsimport Foo from './Foo.vue' // passando propriedades h(Foo, { // equivalente de `some-prop="hello"` someProp: 'hello', // equivalente de `@update="() => {}"` onUpdate: () => {} }) // passando a única ranhura padrão h(Foo, () => 'default slot') // passando ranhuras nomeadas // repara que o `null` é obrigatório para evitar // que o objeto de ranhuras seja tratado como propriedades h(MyComponent, null, { default: () => 'default slot', foo: () => h('div', 'foo'), bar: () => [h('span', 'one'), h('span', 'two')] })
Consulte também Guia - Funções de Interpretação - Criando Nós Virtuais
mergeProps()
Combina vários objetos de propriedades com tratamento especial para certas propriedades.
Tipo
tsfunction mergeProps(...args: object[]): object
Detalhes
mergeProps()
suporta a fusão de vários objetos de propriedades com tratamento especial para as seguintes propriedades:class
style
- Ouvintes de evento
onXxx
- vários ouvintes com o mesmo nome serão combinados num vetor.
Se não precisarmos do comportamento de combinação e quisermos substituições simples, q propagação de objeto nativo pode ser usada.
Exemplo
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 um nó virtual.
Tipo
tsfunction cloneVNode(vnode: VNode, extraProps?: object): VNode
Detalhes
Retorna um nó virtual clonado, opcionalmente com propriedades adicionais para combinar com o original.
Uma vez criados os nós virtuais devem ser considerados imutáveis e não devemos mudar as propriedades dum nó virtual existente. Ao invés disto, o clonamos com propriedades diferentes ou adicionais.
Os nós virtuais têm propriedades internas especiais, então cloná-los não tão simples quando uma propagação de objeto.
cloneVNode()
manipula a maioria da lógica interna.Exemplo
jsimport { h, cloneVNode } from 'vue' const original = h('div') const cloned = cloneVNode(original, { id: 'foo' })
isVNode()
Verifica se um valor é um nó virtual.
Tipo
tsfunction isVNode(value: unknown): boolean
resolveComponent()
Para resolver manualmente um componente registado por nome.
Tipo
tsfunction resolveComponent(name: string): Component | string
Detalhes
Nota: não precisamos disto se pudermos importar o componente diretamente.
resolveComponent()
deve ser chamada dentro dasetup()
ou da função de interpretação no sentido de resolver a partir do contexto do componente correto.Se o componente não for encontrado, um aviso de execução será emitido, e a sequência de caracteres do nome é retornada.
Exemplo
jsimport { h, resolveComponent } from 'vue' export default { setup() { const ButtonCounter = resolveComponent('ButtonCounter') return () => { return h(ButtonCounter) } } }
Consulte também Guia - Funções de Interpretação - Componentes
resolveDirective()
Para resolver manualmente uma diretiva registada por nome.
Tipo
tsfunction resolveDirective(name: string): Directive | undefined
Detalhes
Nota: não precisamos disto se pudermos importar a diretiva diretamente.
resolveDirective()
dever chamada dentro dasetup()
ou da função de interpretação no sentido de resolver a partir do contexto do componente correto.Se a diretiva não for encontrada, um aviso de execução será emitido, e a função retorna
undefined
.Consulte também Guia - Funções de Interpretação - Diretivas Personalizadas
withDirectives()
Para adicionar diretivas personalizadas aos nós virtuais.
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] >
Detalhes
Envolve um nó virtual existente com as diretivas personalizadas. O segundo argumento é um vetor de diretivas personalizadas. Cada diretiva personalizada é também representada como um vetor na forma de
[Directive, value, argument, modifiers]
. Os últimos elementos do vetor podem ser omitidos se não forem necessários.Exemplo
jsimport { h, withDirectives } from 'vue' // uma diretiva personalizada const pin = { mounted() { /* ... */ }, updated() { /* ... */ } } // <div v-pin:top.animate="200"></div> const vnode = withDirectives(h('div'), [ [pin, 200, 'top', { animate: true }] ])
Consulte também Guia - Funções de Interpretação - Diretivas Personalizadas
withModifiers()
Para adicionar modificadores de v-on
embutidos à uma função manipuladora de eventos.
Tipo
tsfunction withModifiers(fn: Function, modifiers: string[]): Function
Exemplo
jsimport { h, withModifiers } from 'vue' const vnode = h('button', { // equivalente de `v-on:click.stop.prevent` onClick: withModifiers(() => { // ... }, ['stop', 'prevent']) })
Consulte também Guia - Funções de Interpretação - Modificadores de Evento