Skip to content
Mithril.js 2
Main Navigation PrzewodnikAPI

Polski

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

Polski

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

Wygląd

Sidebar Navigation

API

Podstawowe 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(obiekt, extra)

Opcjonalne API

stream()

Przewodnik

Na tej stronie

render(element, vnodes) ​

Opis ​

Renderuje szablon do drzewa DOM.

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

Podpis ​

m.render(element, vnodes, redraw)

ArgumentTypWymaganyOpis
elementElementTakElement DOM, który będzie węzłem nadrzędnym dla renderowanego poddrzewa.
vnodesArray<Vnode>|VnodeTakWęzły VDOM (Vnody) do renderowania.
redraw() -> anyNieFunkcja zwrotna wywoływana przy każdym wywołaniu obsługi zdarzeń w renderowanym poddrzewie.
zwracaZwraca undefined.

Jak czytać sygnatury

Jak to działa ​

Metoda m.render(element, vnodes) przyjmuje wirtualne drzewo DOM (zwykle generowane za pomocą funkcji m() hyperscript), generuje odpowiadające mu drzewo DOM i montuje je w elemencie element. Jeśli element zawiera już drzewo DOM zamontowane przez wcześniejsze wywołanie m.render(), vnodes jest porównywane z poprzednim drzewem vnodes, a istniejące drzewo DOM jest modyfikowane tylko tam, gdzie jest to konieczne, aby odzwierciedlić zmiany. Niezmienione węzły DOM pozostają nietknięte.

Opcjonalny argument redraw jest wywoływany za każdym razem, gdy wywoływany jest program obsługi zdarzeń w dowolnym miejscu renderowanego poddrzewa. Jest on używany przez m.mount i m.redraw do implementacji funkcjonalności autoredraw, ale jest również dostępny dla bardziej zaawansowanych przypadków użycia, takich jak integracja z frameworkami innych firm.

m.render działa synchronicznie.

Dlaczego Virtual DOM ​

Generowanie drzewa vnode przy każdym odświeżeniu może wydawać się nieefektywne, ale tworzenie i porównywanie struktur danych JavaScript jest zaskakująco tanie w porównaniu z odczytem i modyfikacją DOM.

Manipulacja DOM może być niezwykle kosztowna z kilku powodów. Naprzemienne odczyty i zapisy mogą negatywnie wpływać na wydajność, powodując wielokrotne przebudowy strony następujące szybko po sobie, podczas gdy porównywanie wirtualnych drzew DOM pozwala na łączenie zapisów w jedno przemalowanie. Ponadto wydajność różnych operacji DOM zależy od implementacji i może być trudna do opanowania i zoptymalizowania pod kątem wszystkich przeglądarek. Na przykład w niektórych implementacjach odczyt childNodes.length ma złożoność O(n); w niektórych odczyt parentNode powoduje przemalowanie, itp.

Natomiast przetwarzanie struktur danych JavaScript ma znacznie bardziej przewidywalny i rozsądny profil wydajności, a ponadto drzewo vnode jest zaimplementowane tak, by umożliwiać nowoczesnym silnikom JavaScript stosowanie agresywnych optymalizacji, takich jak ukryte klasy, dla jeszcze lepszej wydajności.

Różnice w stosunku do innych metod API ​

Metoda m.render() jest wewnętrznie wywoływana przez m.mount(), m.route(), m.redraw() i m.request(). Nie jest wywoływana po aktualizacjach strumieniowych.

W przeciwieństwie do m.mount() i m.route(), drzewo vnode renderowane za pomocą m.render() nie odświeża się automatycznie w odpowiedzi na zdarzenia w widoku, wywołania m.redraw() lub wywołania m.request(). Jest to mechanizm niskiego poziomu przeznaczony dla twórców bibliotek, którzy chcą ręcznie kontrolować proces renderowania, zamiast polegać na wbudowanym systemie automatycznego odświeżania w Mithril.js.

Kolejną różnicą jest to, że metoda m.render oczekuje vnode (lub tablicy vnode) jako drugiego parametru, podczas gdy m.mount() i m.route() oczekują komponentów.

Użycie autonomiczne ​

var render = require("mithril/render")

Zakres modułu m.render jest zbliżony do bibliotek widoków, takich jak Knockout, React i Vue. Implementuje silnik różnicowania wirtualnego DOM z nowoczesnym algorytmem redukcji przestrzeni wyszukiwania oraz recyklingiem DOM, co zapewnia najlepszą wydajność w swojej klasie, zarówno pod względem początkowego ładowania strony, jak i ponownego renderowania. Nie ma zależności od innych części Mithril.js poza normalizacją udostępnianą za pośrednictwem require("mithril/render/vnode") i może być używany jako samodzielna biblioteka.

Pomimo stosunkowo niewielkich rozmiarów, moduł renderowania jest w pełni funkcjonalny i samowystarczalny. Obsługuje wszystko, czego można oczekiwać: SVG, elementy niestandardowe i wszystkie prawidłowe atrybuty i zdarzenia - bez dziwnych wyjątków czy problemów z wielkością liter. Oczywiście w pełni obsługuje również komponenty i metody cyklu życia.

Używając m.render jako samodzielnego modułu, warto również zaimportować funkcję hyperscript w celu tworzenia węzłów VDOM do renderowania.

Pager
Poprzednia stronam(selector, attributes, children)
Następna stronamount(root, component)

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors

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

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors