fragment(attrs, children)
Beschreibung
Ermöglicht das Hinzufügen von Lifecycle-Methoden zu einem Fragment-VNode (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 }, [
// ein Fragment, das zwei Elemente enthält
m('li', 'child 3'),
m('li', 'child 4'),
])
: null,
]);
Signatur
Erzeugt einen Fragment-VNode (vnode).
vnode = m.fragment(attrs, children)
Argument | Typ | Erforderlich | Beschreibung |
---|---|---|---|
attrs | Object | Nein | HTML-Attribute oder Eigenschaften des Elements |
children | Array<Vnode>|String|Number|Boolean | Nein | Kind-VNodes (vnodes). Kann als Splat-Argument übergeben werden. |
returns | Vnode | Ein Fragment-VNode (vnode) |
Funktionsweise
m.fragment()
erstellt einen Fragment-VNode (vnode) mit Attributen. Es ist für fortgeschrittene Anwendungsfälle gedacht, wie z.B. die Verwendung von [Keys] (Schlüsseln) oder [Lifecycle-Methoden].
Ein Fragment-VNode (vnode) repräsentiert eine Liste von DOM-Elementen. Wenn Sie einen regulären Elementknoten benötigen, der nur ein DOM-Element repräsentiert und keine spezielle Key-Logik erfordert, sollten Sie stattdessen m()
verwenden.
In den meisten Fällen können Sie stattdessen einfache Arrays oder Splats verwenden, um eine Liste von Knoten zu definieren:
var groupVisible = true;
m(
'ul',
m('li', 'child 1'),
m('li', 'child 2'),
groupVisible
? [
// ein Fragment, das zwei Elemente enthält
m('li', 'child 3'),
m('li', 'child 4'),
]
: null
);
JavaScript-Arrays können jedoch nicht mit Schlüsseln versehen werden oder Lifecycle-Methoden enthalten. Eine Möglichkeit wäre, ein Wrapper-Element zu erstellen, um den Schlüssel oder die Lifecycle-Methode aufzunehmen, aber dies ist manchmal unerwünscht (z. B. in komplexen Tabellenstrukturen). In diesen Fällen kann stattdessen ein Fragment-VNode (vnode) verwendet werden.
Die Verwendung von m.fragment
anstelle einer manuell erstellten VNode-Objektstruktur bietet einige Vorteile: m.fragment
erstellt monomorphe Objekte, die eine bessere Performance aufweisen als die dynamische Erstellung von Objekten. Zudem macht die Verwendung von m.fragment
Ihre Absichten für andere Entwickler deutlicher. Es ist auch weniger wahrscheinlich, dass Sie versehentlich Attribute direkt auf das VNode-Objekt statt auf dessen attrs
-Map setzen.