Skip to content
Mithril.js 2
Main Navigation ガイドAPI

日本語

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
한국어
Italiano
Polski
Türkçe
čeština
magyar

日本語

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
한국어
Italiano
Polski
Türkçe
čeština
magyar

外観

Sidebar Navigation

API

コア API

m(selector, attributes, children)

render(element, vnodes)

mount(root, component)

route(root, defaultRoute, routes)

request(options)

parseQueryString(string)

buildQueryString(object)

buildPathname(object)

parsePathname(文字列型)

trust(html)

fragment(attrs, children)

redraw()

censor(object, extra)

オプション API

stream()

ガイド

このページの内容

render(element, vnodes) ​

Description ​

テンプレートを DOM に描画します。

javascript
m.render(document.body, 'hello');
// <body>hello</body>

Signature ​

m.render(element, vnodes, redraw)

引数型必須説明
elementElementはいサブツリーの親ノードとなる DOM 要素。
vnodesArray<Vnode>|Vnodeはいレンダリングする vnode。
redraw() -> anyいいえサブツリー内のイベントハンドラが呼び出された際に実行されるコールバック。
戻り値undefined を返します。

シグネチャの読み方

How it works ​

m.render(element, vnodes) メソッドは、仮想 DOM ツリー(通常は m() ハイパースクリプト関数 を用いて生成されます)を受け取り、DOM ツリーを生成して element にマウントします。element が以前の m.render() 呼び出しによって DOM ツリーをすでにマウントしている場合、vnodes は以前の vnodes ツリーと差分比較され、既存の DOM ツリーは変更を反映するために必要な箇所のみが更新されます。変更されていない DOM ノードはそのまま維持されます。

オプションの redraw 引数を渡すと、サブツリー内の任意の場所でイベントハンドラが呼び出されるたびに、そのコールバックが実行されます。これは、自動再描画 機能を実装するために m.mount および m.redraw によって使用されますが、サードパーティフレームワークとの統合など、より高度なユースケースのために公開されています。

m.render は同期的に実行されます。

Why Virtual DOM ​

再描画のたびに vnode ツリーを生成するのは非効率に思えるかもしれませんが、実際には、JavaScript データ構造の作成と比較は、DOM の読み取りや変更に比べて非常に低コストです。

DOM 操作は、いくつかの理由でコストが高くなる可能性があります。読み取りと書き込みを交互に行うと、ブラウザで短時間に連続して再描画が発生し、パフォーマンスに悪影響を与える可能性があります。一方、仮想 DOM ツリーを比較することで、書き込みを 1 回の再描画にまとめることができます。また、さまざまな DOM 操作のパフォーマンス特性は実装によって異なり、すべてのブラウザで学習して最適化することが難しい場合があります。たとえば、一部の実装系では、childNodes.length の読み取りの計算量が O(n) になる場合があります。また、parentNode を読み取ると再描画が発生する実装系もあります。

対照的に、JavaScript データ構造の走査は、はるかに予測可能で安定したパフォーマンス特性を持ちます。さらに、vnode ツリーは、最新の JavaScript エンジンが hidden class などの積極的な最適化を適用して、より優れたパフォーマンスを実現できるように実装されています。

Differences from other API methods ​

m.render() メソッドは、内部的に m.mount()、m.route()、m.redraw() および m.request() から呼び出されます。ストリームの更新 後に直接呼び出されることはありません。

m.mount() や m.route() とは異なり、m.render() を用いてレンダリングされた vnode ツリーは、ビューイベント、m.redraw() 呼び出し、m.request() 呼び出しに応答して自動的に再描画されることはありません。これは、Mithril.js の組み込みの自動再描画システムに依存せず、手動でレンダリングを制御したいライブラリ開発者向けの低レベルなメカニズムです。

もう 1 つの違いとして、m.render メソッドは第 2 引数として vnode (または vnode の配列) を受け取るのに対し、m.mount() や m.route() はコンポーネントを受け取る点が挙げられます。

Standalone usage ​

var render = require("mithril/render")

m.render モジュールは、Knockout、React、Vue などのビューライブラリと同等の機能を提供します。最新の検索空間削減アルゴリズムと DOM リサイクルを備えた仮想 DOM 差分エンジンを実装しており、初期ページロードと再レンダリングの両面において、トップクラスのパフォーマンスを発揮します。require("mithril/render/vnode") を通じて公開される正規化処理を除き、Mithril.js の他の部分への依存関係はなく、スタンドアロンライブラリとして使用できます。

比較的小規模ながらも、render モジュールは完全に機能し、自己完結型です。SVG、カスタム要素、およびすべての有効な属性とイベントを、大文字小文字の区別による特殊な事例や例外なく、期待どおりにすべてサポートします。もちろん、コンポーネント と ライフサイクルメソッド も完全にサポートしています。

m.render をスタンドアロンモジュールとして使用する際は、レンダリング対象の vnode を作成するために、ハイパースクリプト関数 もインポートすると便利です。

Pager
前のページm(selector, attributes, children)
次のページmount(root, component)

MITライセンス の下で公開されています。

Copyright (c) 2024 Mithril Contributors

https://mithril.js.org/render.html

MITライセンス の下で公開されています。

Copyright (c) 2024 Mithril Contributors