fragment(attrs, children)
- コア
- オプショナル
- ツール
説明
フラグメントvnodeにライフサイクルメソッドを追加します
var groupVisible = true
var log = function() {
console.log("グループが表示されました")
}
m("ul", [
m("li", "子供 1"),
m("li", "子供 2"),
groupVisible ?m.fragment({oninit: log}, [
// フラグメントには2つの要素が含まれる
子供m("li", "子供 3"),
m("li", "child 4"),
]) : null
])
シグニチャ
vnodeフラグメントを生成します。
vnode = m.fragment(attrs, children)
引数 | 型 | 必須 | 説明 |
---|---|---|---|
attrs |
Object |
Yes | 属性のマップ |
children |
Array<Vnode|String|Number|Boolean|null|undefined> |
Yes | vnodeのリスト |
返り値 | Vnode |
フラグメントvnode |
どのように動作するのか
m.fragment()
は属性付きのフラグメントvnodeを作成します。このメソッドはキーやライフサイクルメソッドなどの高度なユースケースで使います。
フラグメントvnodeはDOM要素のリストを表現します。もし通常の1つのDOM要素を現すエレメントvnodeが必要であれば、このメソッドの代わりにm()
を使用してください。
通常であれば、ノードのリストを表現するには、単純に配列を使うことができます:
var groupVisible = true
m("ul", [
m("li", "子供 1"),
m("li", "子供 2"),
groupVisible ?[
// フラグメントには2つの要素が含まれる
子供m("li", "子供 3"),
m("li", "child 4"),
] : null
])
しかし、JavaScriptの配列には、キーを関連付けたり、ライフサイクルメソッドを付与することができません。キーやライフサイクルメソッドを管理するラッパー要素を作るのも方法の1つですが、この方法を使うと新しい不要な要素ができてしまい、複雑なテーブル構造などをさらにわかりにくくします。このような時に代わりにフラグメントvnodeが使えます。
vnodeによるオブジェクト構造を自作する代わりにm.fragment
を使用するといくつかのメリットがあります。まず、m.fragmentが作るのは単一構造のオブジェクトであり、動的にオブジェクトを作成するのよりもパフォーマンスが優れています。これに加えて、m.fragment
を使うことで、設計の意図を明確に他の開発者に伝えることができます。そして、attrs
のマップ以外に間違ってvnodeオブジェクトの属性を追加してしまうことを減らすことができます。
License: MIT. © Leo Horie.