fragment(attrs, children)
Descrizione
Permette di associare metodi del ciclo di vita a un fragment 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 }, [
// un fragment contenente due elementi
m('li', 'child 3'),
m('li', 'child 4'),
])
: null,
]);
Firma
Genera un fragment vnode.
vnode = m.fragment(attrs, children)
Argomento | Tipo | Richiesto | Descrizione |
---|---|---|---|
attrs | Object | No | Attributi HTML o proprietà dell'elemento DOM. |
children | Array<Vnode>|String|Number|Boolean | No | Vnode figli. Può essere specificato tramite parametri splat. |
restituisce | Vnode | Un fragment vnode. |
Come funziona
m.fragment()
crea un vnode fragment con attributi. È pensato per casi d'uso avanzati che richiedono l'uso di key o metodi del ciclo di vita.
Un fragment vnode rappresenta un elenco di elementi DOM. Se si desidera un vnode elemento normale che rappresenti un singolo elemento DOM e non si ha bisogno di una logica basata su key, si dovrebbe invece usare m()
.
Normalmente si possono usare semplici array o splat per rappresentare un elenco di nodi:
var groupVisible = true;
m(
'ul',
m('li', 'child 1'),
m('li', 'child 2'),
groupVisible
? [
// un fragment contenente due elementi
m('li', 'child 3'),
m('li', 'child 4'),
]
: null
);
Tuttavia, gli array JavaScript non possono essere identificati tramite key o contenere metodi del ciclo di vita. Un'alternativa sarebbe quella di creare un elemento wrapper per contenere la key o il metodo del ciclo di vita, ma a volte non è consigliabile avere un elemento aggiuntivo (ad esempio in strutture di tabelle complesse). In questi casi, si può invece utilizzare un vnode fragment.
Ci sono diversi vantaggi nell'utilizzare m.fragment
invece di scrivere manualmente una struttura di oggetti vnode: m.fragment
crea oggetti monomorfici, che offrono prestazioni migliori rispetto alla creazione dinamica di oggetti. Inoltre, l'utilizzo di m.fragment
rende esplicite le intenzioni agli altri sviluppatori e riduce la probabilità di impostare erroneamente gli attributi sull'oggetto vnode stesso invece che sulla sua mappa attrs
.