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()

ガイド

このページの内容

mount(root, component) ​

Description ​

コンポーネントを有効化し、ユーザーイベントに応じて自動的に再描画されるようにします。

javascript
var state = {
  count: 0,
  inc: function () {
    state.count++;
  },
};

var Counter = {
  view: function () {
    return m('div', { onclick: state.inc }, state.count);
  },
};

m.mount(document.body, Counter);

コンポーネントをマウントする際に引数を渡したい場合は、次のように記述します。

javascript
m.mount(element, {
  view: function () {
    return m(Component, attrs);
  },
});

Signature ​

m.mount(element, Component)

ArgumentTypeRequiredDescription
elementElementYesサブツリーの親ノードとなる DOM 要素
ComponentComponent|nullYesレンダリングされるコンポーネント。null を指定するとツリーがアンマウントされ、内部状態がクリアされます。
returns何も返しません。

署名の読み方

How it works ​

m.mount(element, Component) は、呼び出されると、コンポーネントを要素にレンダリングし、(element, Component) のペアを再描画サブシステムに登録します。このツリーは、手動または自動で再描画がトリガーされると、再レンダリングされます。

再描画時には、新しい vDOM ツリーと古いものが比較(または「差分」)され、既存の DOM ツリーは変更を反映するために必要な箇所のみ変更されます。変更されていない DOM ノードは変更されません。

Replace a component ​

element が現在のマウントポイントである状態で mount(element, OtherComponent) を実行すると、以前にマウントされていたコンポーネントが OtherComponent に置き換えられます。

Unmount ​

以前にコンポーネントがマウントされていた要素に対し m.mount(element, null) を実行すると、アンマウント処理が行われ、Mithril.js の内部状態がクリアされます。これは、root ノードを手動で DOM から削除する際のメモリリークを防ぐのに役立ちます。

Headless mounts ​

高度な状況では、画面に何もレンダリングせずに、再描画をサブスクライブしてリッスンしたい場合があります。これは、ライブ DOM ツリーに追加されていない要素で m.mount を呼び出し、マウントしているコンポーネントにすべてのロジックを配置することで実現できます。コンポーネントには view が必要ですが、有用な値を返す必要はなく、null や undefined などの値を返しても問題ありません。

javascript
var elem = document.createElement('div');

// Subscribe (サブスクライブ)
m.mount(elem, {
  oncreate: function () {
    // once added: 追加されたとき
  },
  onupdate: function () {
    // on each redraw: 再描画ごと
  },
  onremove: function () {
    // clean up whatever you need: 必要なものをクリーンアップ
  },

  // Necessary boilerplate (必要なボイラープレート)
  view: function () {},
});

// Unsubscribe (サブスクライブ解除)
m.mount(elem, null);

他のマウントルートを気にする必要はありません。複数のルートがサポートされており、互いに干渉することはありません。別のフレームワークと統合するときに、コンポーネントで上記を実行することもできます。問題ありません。

Performance considerations ​

再描画ごとに vnode ツリーを生成するのは無駄に思えるかもしれませんが、実際には JavaScript のデータ構造を作成し比較する処理は、DOM の読み書きに比べて非常に低コストです。

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

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

Differences from m.render ​

m.mount を介してレンダリングされたコンポーネントは、ビューイベント、m.redraw() の呼び出し、または m.request() の呼び出しに応じて自動的に再描画されます。Vnode は m.render() を介してレンダリングされた場合、自動的に再描画されません。

m.mount() は、ルーティング処理を別のライブラリやフレームワークに委ねている既存のコードベースに Mithril.js のウィジェットを組み込むアプリケーション開発者にとって、Mithril.js の自動再描画機能を活用できる点で適しています。

m.render() は、レンダリングを手動で制御したいライブラリ開発者(サードパーティ製ルーターとの連携や、Redux のようなデータレイヤーライブラリの使用など)に適しています。

Pager
前のページrender(element, vnodes)
次のページroute(root, defaultRoute, routes)

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

Copyright (c) 2024 Mithril Contributors

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

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

Copyright (c) 2024 Mithril Contributors