fragment(attrs, children)
Описание
Позволяет прикреплять методы жизненного цикла к фрагменту 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 }, [
// фрагмент, содержащий два элемента
m('li', 'child 3'),
m('li', 'child 4'),
])
: null,
]);
Сигнатура
Создает vnode-фрагмент vnode.
vnode = m.fragment(attrs, children)
Аргумент | Тип | Обязательно | Описание |
---|---|---|---|
attrs | Object | Нет | HTML атрибуты или свойства элемента |
children | Array<Vnode>|String|Number|Boolean | Нет | Дочерние vnodes. Могут быть переданы как отдельные аргументы (splat arguments) с использованием синтаксиса распространения. |
возвращает | Vnode | vnode-фрагмент vnode |
Как это работает
m.fragment()
создает vnode-фрагмент vnode с атрибутами. Он предназначен для продвинутых случаев использования, таких как применение ключей или методов жизненного цикла.
Vnode-фрагмент представляет собой список DOM-элементов. Если вам нужен обычный vnode, представляющий один DOM-элемент и не требующий логики работы с ключами, используйте m()
.
Обычно для обозначения списка узлов можно использовать простые массивы или синтаксис распространения:
var groupVisible = true;
m(
'ul',
m('li', 'child 1'),
m('li', 'child 2'),
groupVisible
? [
// фрагмент, содержащий два элемента
m('li', 'child 3'),
m('li', 'child 4'),
]
: null
);
Однако JavaScript массивы не поддерживают ключи или методы жизненного цикла. Одним из решений является создание элемента-обертки для размещения ключа или метода жизненного цикла, но иногда добавление дополнительного элемента нежелательно (например, в сложных табличных структурах). В этих случаях можно использовать vnode-фрагмент.
Использование m.fragment
вместо ручного создания структуры объекта vnode имеет несколько преимуществ: m.fragment
создает мономорфные объекты monomorphic objects, которые обладают лучшей производительностью, чем динамическое создание объектов. Кроме того, использование m.fragment
делает ваш код более понятным для других разработчиков и снижает вероятность ошибочной установки атрибутов на сам объект vnode, а не на его объект атрибутов attrs
.