コンテンツにスキップ

ユーティリティ

WebComponent が内部で使用しているヘルパー群です。直接使用できるようエクスポートされています。utils エントリポイントから、または各モジュールを個別にインポートしてください。

import { serialize, getKebabCase } from 'web-component-base/utils'
// または
import { serialize } from 'web-component-base/utils/serialize.js'

実際に動く様子はこちら: 一部だけを使うデモ ↗は、これらのヘルパーからベースクラスを拡張せずにコンポーネントを構築しています。

kebab-caseのattribute名を、対応するcamelCaseのpropキーに変換します。

パラメータ
kebabstringattribute名
戻り値stringpropキー
getCamelCase('max-count') // 'maxCount'

camelCaseのpropキーを、対応するkebab-caseのattribute名に変換します。これは observedAttributes が使うマッピングです。

パラメータ
strstringpropキー
戻り値stringattribute名
getKebabCase('maxCount') // 'max-count'

連続する大文字は1つの単語として扱われるため、parseHTMLparse-html になります。

値をそのattribute文字列形式に変換します。

パラメータ
valueanyシリアライズする値
戻り値stringattribute値

number、boolean、objectは JSON.stringify を通ります。文字列とそれ以外はそのまま変更なく通過します。

attribute文字列を、指定された宣言済みの型の値にパースし直します。serialize() の逆です。

パラメータ
valuestringattribute値
typestring'boolean''number''object''undefined''string' のいずれか
戻り値anyパースされた値

'boolean' は常に true を返します。これは厳密なHTMLのboolean属性の意味論であり、存在する値はどれもtrueになります。不在の場合は呼び出し元が処理し、ここには到達しません。'number''object''undefined'JSON.parse を使い、不正な入力に対しては例外をスローします。文字列はそのまま通過します。

vnodeツリーから実際のDOMを構築します。

パラメータ
treeanyvnode、vnodeの配列、またはテキスト値
戻り値Node要素、DocumentFragment、またはテキストノード

配列は DocumentFragment になります。type を持たない値はテキストノードになります。propは applyProp() で適用され、子要素は再帰的に作成されます。

htmlで説明されているルールを使い、単一のvnode propを要素に適用します。

パラメータ
elElementpropを適用する要素
propstringvnodeに書かれたとおりのprop名
valueanyprop値

reconcilerと共有されているため、パッチされた要素も新規作成された要素とまったく同じルールでpropを取得します。

これらは、Template vs Renderで説明されているインプレースの再レンダリングを支えています。マッチングはインデックスベースで非キーです。

patchChildren(parent, oldChildren, newChildren)

Section titled “patchChildren(parent, oldChildren, newChildren)”

親ノードの子要素を、あるvnodeリストから別のvnodeリストへと調整し、一致するものをその場でパッチし、余った要素を削除します。

パラメータ
parentNodeパッチを適用する親ノード
oldChildrenany以前のvnodeの子要素、または以前のツリー
newChildrenany新しいvnodeの子要素、または新しいツリー

patchNode(parent, dom, oldVnode, newVnode)

Section titled “patchNode(parent, dom, oldVnode, newVnode)”

単一のノード位置を調整します。vnodeの型が一致する場合は dom を再利用し、それ以外の場合は置き換えます。

パラメータ
parentNodeパッチされている親ノード
domNode | nullこのインデックスにある既存のノード(あれば)
oldVnodeanydom を生成したvnode(分かっていれば)
newVnodeanyレンダリングするvnode