fragment(attrs, children)
Description
Permet d'associer des méthodes de cycle de vie à 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 contenant deux éléments
m('li', 'child 3'),
m('li', 'child 4'),
])
: null,
]);
Signature
Génère un vnode de type fragment.
vnode = m.fragment(attrs, children)
Argument | Type | Required | Description |
---|---|---|---|
attrs | Object | No | Attributs HTML ou propriétés de l'élément. |
children | Array<Vnode>|String|Number|Boolean | No | Vnodes enfants. Peut être écrit sous forme d'arguments splat. |
returns | Vnode | Un vnode de type fragment. |
Fonctionnement
m.fragment()
crée un vnode de type fragment avec des attributs. Il est destiné aux cas d'utilisation avancés impliquant des clés ou des méthodes de cycle de vie.
Un vnode de type fragment représente une liste d'éléments DOM. Si vous souhaitez un vnode qui représente un seul élément DOM et que vous n'avez pas besoin de logique de clé, vous devriez plutôt utiliser m()
.
Normalement, vous pouvez utiliser de simples tableaux ou des splats à la place pour désigner une liste de nœuds :
var groupVisible = true;
m(
'ul',
m('li', 'child 1'),
m('li', 'child 2'),
groupVisible
? [
// un fragment contenant deux éléments
m('li', 'child 3'),
m('li', 'child 4'),
]
: null
);
Cependant, les tableaux JavaScript ne peuvent pas être indexés ou contenir des méthodes de cycle de vie. Une option serait de créer un élément enveloppant pour héberger la clé ou la méthode de cycle de vie, mais il n'est parfois pas souhaitable d'avoir un élément supplémentaire (par exemple, dans des structures de table complexes). Dans ces cas, un vnode de type fragment peut être utilisé à la place.
L'utilisation de m.fragment
au lieu d'écrire manuellement une structure d'objet vnode présente quelques avantages : m.fragment
crée des vnodes monomorphiques, qui ont de meilleures caractéristiques de performance que la création dynamique d'objets. De plus, l'utilisation de m.fragment
indique clairement vos intentions aux autres développeurs, et cela réduit la probabilité que vous définissiez par erreur des attributs sur l'objet vnode lui-même plutôt que sur sa map attrs
.