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

trust(html)

fragment(attrs, children)

redraw()

censor(object, extra)

Опциональный API

stream()

Руководство

Содержание страницы

mount(root, component) ​

Описание ​

Активирует компонент, обеспечивая его автоматическую перерисовку при возникновении пользовательских событий.

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);
  },
});

Сигнатура ​

m.mount(element, Component)

АргументТипОбязательныйОписание
elementElementДаDOM-элемент, который станет родительским узлом для поддерева.
ComponentComponent|nullДаКомпонент, который будет отрисован. null размонтирует дерево и очищает внутреннее состояние.
возвращаетНичего не возвращает.

Как читать сигнатуры

Как это работает ​

m.mount(element, Component) при вызове отрисовывает компонент в указанном элементе и регистрирует пару (element, Component) в подсистеме перерисовки. Дерево будет перерисовано при ручном или автоматическом запуске перерисовки.

При перерисовке новое vDOM-дерево сравнивается (выполняется операция diff) со старым, и существующее DOM-дерево изменяется только в тех местах, где это необходимо для отражения изменений. Неизмененные DOM-узлы не затрагиваются.

Замена компонента ​

Вызов mount(element, OtherComponent), где element — это текущая точка монтирования, заменяет ранее смонтированный компонент на OtherComponent.

Размонтирование ​

Использование m.mount(element, null) на элементе с ранее смонтированным компонентом размонтирует его и очищает внутреннее состояние Mithril.js. Это может быть полезно для предотвращения утечек памяти при удалении root-узла вручную из DOM.

Монтирование без DOM-привязки ​

В некоторых сложных ситуациях может потребоваться подписка на события и отслеживание перерисовок без отображения чего-либо на экране. Это можно сделать с помощью монтирования без DOM-привязки, созданного простым вызовом m.mount с элементом, который не добавлен в активное DOM-дерево, и помещением всей логики в монтируемый компонент. В компоненте все равно нужен view, но он не должен возвращать ничего полезного, например, null или undefined.

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

// Подписаться
m.mount(elem, {
  oncreate: function () {
    // После добавления
  },
  onupdate: function () {
    // При каждой перерисовке
  },
  onremove: function () {
    // Очистить все необходимое
  },

  // Обязательный шаблон
  view: function () {},
});

// Отписаться
m.mount(elem, null);

Не беспокойтесь о других точках монтирования. Поддерживается несколько корней, и они не будут мешать друг другу. Вы даже можете сделать вышеописанное в компоненте при интеграции с другим фреймворком, и это не вызовет проблем.

Соображения производительности ​

Может показаться неэффективным генерировать дерево vnode при каждой перерисовке, но создание и сравнение структур данных JavaScript значительно менее затратно по сравнению с чтением и изменением DOM.

Обращение к DOM может быть очень затратным по нескольким причинам. Чередование операций чтения и записи может негативно сказаться на производительности, вызывая несколько перерисовок браузера подряд, тогда как сравнение виртуальных DOM-деревьев позволяет объединять записи в одну перерисовку. Кроме того, характеристики производительности различных операций DOM различаются в разных реализациях, и их сложно изучать и оптимизировать для всех браузеров. Например, в некоторых реализациях чтение childNodes.length имеет сложность O(n); в некоторых чтение parentNode вызывает перерисовку и т. д.

В отличие от этого, обход структуры данных JavaScript имеет гораздо более предсказуемый и разумный профиль производительности, и, кроме того, дерево vnode реализовано таким образом, что позволяет современным движкам JavaScript применять агрессивные оптимизации, такие как скрытые классы, для еще большей производительности.

Отличия от m.render ​

Компонент, отрисованный с помощью m.mount, автоматически перерисовывается в ответ на события, происходящие в представлении, вызовы m.redraw() или вызовы m.request(). Vnodes, отрисованные с помощью m.render(), этого не делают.

m.mount() подходит для разработчиков приложений, интегрирующих виджеты Mithril.js в существующие кодовые базы, где маршрутизация осуществляется другой библиотекой или фреймворком, при этом используя преимущества автоматической перерисовки Mithril.js.

m.render() подходит для авторов библиотек, которые хотят вручную управлять рендерингом (например, при подключении к стороннему маршрутизатору или использовании сторонних библиотек уровня данных, таких как Redux).

Pager
Предыдущая страницаrender(element, vnodes)
Следующая страницаroute(root, defaultRoute, routes)

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors

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

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors