fragment(attrs, children)
Descrição
Permite associar métodos de ciclo de vida a um fragmento vnode.
var groupVisible = true;
var log = function () {
console.log('group is now visible');
};
m('ul', [
m('li', 'child 1'),
m('li', 'child 2'),
groupVisible
? m.fragment({ oninit: log }, [
// um fragmento contendo dois elementos
m('li', 'child 3'),
m('li', 'child 4'),
])
: null,
]);
Assinatura
Gera um fragmento vnode.
vnode = m.fragment(attrs, children)
Argumento | Tipo | Obrigatório | Descrição |
---|---|---|---|
attrs | Object | Não | Atributos HTML ou propriedades do elemento. |
children | Array<Vnode>|String|Number|Boolean | Não | Vnodes filhos. Pode ser escrito como argumentos splat. |
retorna | Vnode | Um fragmento vnode. |
Como funciona
m.fragment()
cria um vnode fragmento com atributos. Ele é destinado a casos de uso avançados envolvendo chaves ou métodos de ciclo de vida.
Um vnode fragmento representa uma lista de elementos do DOM. Se você deseja um vnode de elemento regular que represente apenas um elemento DOM e não requer chaves, você deve usar m()
em vez disso.
Normalmente, você pode usar arrays simples ou splats para denotar uma lista de nós:
var groupVisible = true;
m(
'ul',
m('li', 'child 1'),
m('li', 'child 2'),
groupVisible
? [
// um fragmento contendo dois elementos
m('li', 'child 3'),
m('li', 'child 4'),
]
: null
);
No entanto, arrays JavaScript não podem ter chaves ou conter métodos de ciclo de vida. Uma opção seria criar um elemento wrapper para hospedar a chave ou o método de ciclo de vida, mas às vezes não é desejável ter um elemento extra (por exemplo, em estruturas de tabela complexas). Nesses casos, um fragmento vnode pode ser usado.
Existem alguns benefícios em usar m.fragment
em vez de escrever manualmente uma estrutura de objeto vnode: m.fragment
cria objetos monomórficos, que têm características de desempenho melhores do que criar objetos dinamicamente. Além disso, usar m.fragment
torna suas intenções claras para outros desenvolvedores e diminui a probabilidade de você definir atributos erroneamente no próprio objeto vnode, em vez do mapa attrs
.