h() 仮想ノードの作成
最終更新:2026-10-22
h() 仮想ノードの作成
h() は仮想ノード(VNode)を作成します。レンダー関数と JSX の基盤となる API で、動的に構造を生成する場合にも使われます。
| グループ | レンダー関数と SSR |
|---|---|
| 種類 | API |
| スコープ | コンポーネント内 |
| Vue バージョン | 3.0+ |
| SSR 対応 | 対応 |
📝 構文
h("div", { class: "box" }, "コンテンツ")
h(MyComp, { msg: "hi" }, { default: () => "スロットの内容" })
⚙️ 引数
| type, props?, children? | 型(タグ名またはコンポーネント)+ 任意の props オブジェクト + 子ノード(文字列/配列/スロットオブジェクト) |
|---|
戻り値:VNode(仮想ノード)
▶ 例
以下のコードを編集して結果を確認しましょう:
出力:
Renders a three-item list.
💡 ポイント
ℹ️ 補足 テンプレートのコンパイル結果は h() の呼び出しです。理解しておくと、コンパイル後のコードや JSX が読みやすくなります。
💡 ヒント 完全にプログラマティックな構造が必要なときだけ h() を手書きします。通常のページではテンプレートの方が保守しやすいです。
⚠️ 注意 第 1 引数は大文字小文字を区別します。h('div') はネイティブタグですが、h('Div') はコンポーネントとして解釈されます。
🏷️ 関連レンダー関数と SSR
💡 関連ケース
関連ケースは近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q h と JSX はどちらが良いですか?
A JSX は HTML に近く可読性が高いですが、ビルド環境が必要です。h はビルド不要で、少量の動的構造に向いています。
Q スロットはどう渡しますか?
A 第 3 引数にオブジェクトを渡します:{ default: () => [...], header: () => [...] }。
Q import は必須ですか?
A ビルドプロジェクトでは vue から import します。CDN 環境では Vue.h を使います。