Skip to content
Mithril.js 2
Main Navigation AnleitungAPI

Deutsch

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

Deutsch

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

Aussehen

Sidebar Navigation

Erste Schritte

Installation

Einfache Anwendung

Ressourcen

JSX

ES6+ in älteren Browsern

Animationen

Testen

Beispiele

Integration von Drittanbietern

Pfadverarbeitung

Schlüsselkonzepte

Virtuelle DOM Knoten

Komponenten

Lebenszyklus-Methoden

Keys

Das Auto-Redraw-System

Sonstiges

Framework-Vergleich

Migration von v1.x

Migration von v0.2.x auf v2.x

API

Auf dieser Seite

Mithril.js 2 Dokumentation ​

Was ist Mithril.js? ​

Mithril.js ist ein modernes, clientseitiges JavaScript-Framework zur Entwicklung von Single-Page-Anwendungen (SPAs). Es zeichnet sich durch seine geringe Größe (8.9 KiB gzip), hohe Geschwindigkeit und integrierte Funktionen für Routing und XHR aus.

Downloadgröße
Mithril.js (8.9 KiB)
Vue + Vue-Router + Vuex + fetch (40 KiB)
React + React-Router + Redux + fetch (64 KiB)
Angular (135 KiB)
Performance
Mithril.js (6.4 ms)
Vue (9.8 ms)
React (12.1 ms)
Angular (11.5 ms)

Mithril.js wird von Unternehmen wie Vimeo und Nike sowie Open-Source-Projekten wie Lichess eingesetzt.

Wenn Sie ein erfahrener Entwickler sind und mehr über den Vergleich von Mithril.js mit anderen Frameworks erfahren möchten, lesen Sie die Seite Framework-Vergleich.

Mithril.js unterstützt IE11, Firefox ESR und die letzten beiden Versionen von Firefox, Edge, Safari und Chrome. Es sind keine Polyfills erforderlich.

Suchen Sie die v1-Dokumente? Klicken Sie hier.

Erste Schritte ​

Eine einfache Möglichkeit, Mithril.js kennenzulernen, ist die Einbindung über ein CDN und das Durcharbeiten des Tutorials. Es deckt den Großteil der API ab (einschließlich Routing und XHR) und ist in nur 10 Minuten erlernbar.

Erstellen wir eine HTML-Datei, um loszulegen:

html
<body>
  <script src="https://unpkg.com/mithril/mithril.js"></script>
  <script>
    var root = document.body;

    // Ihr Code kommt hierher!
  </script>
</body>

Um es Ihnen noch einfacher zu machen, können Sie Mithril.js direkt hier ausprobieren. Dies ist ein Live-Playground mit bereits installiertem Mithril.js, der übrigens ebenfalls mit Mithril erstellt wurde.

var root = document.body;

// Dein Code hier

m.mount(root, {
  view: function () {
    return m('h1', 'Try me out');
  },
});

Klicken Sie hier, um das Beispiel auf flems.io zu öffnen

Hallo Welt ​

Beginnen wir mit einem minimalen Beispiel: Lassen Sie uns etwas Text auf dem Bildschirm ausgeben. Kopieren Sie den folgenden Code in Ihre Datei (idealerweise tippen Sie ihn ab, um den Lerneffekt zu maximieren).

javascript
var root = document.body;

m.render(root, 'Hello world');

Ändern wir nun den Text in etwas anderes. Fügen Sie diese Codezeile unter der vorherigen hinzu:

javascript
m.render(root, 'My first app');

Wie Sie sehen, verwenden Sie denselben Code, um HTML zu erstellen und zu aktualisieren. Mithril.js findet automatisch den effizientesten Weg, den Text zu aktualisieren, anstatt ihn komplett neu zu erstellen.

Live-Beispiel ​

var root = document.body;

m.render(root, 'Hello World');

DOM-Elemente ​

Lassen Sie uns unseren Text in ein <h1>-Tag einfügen.

javascript
m.render(root, m('h1', 'My first app'));

Die Funktion m() kann verwendet werden, um beliebige HTML-Strukturen zu beschreiben. Wenn Sie also dem <h1> eine Klasse hinzufügen möchten:

javascript
m('h1', { class: 'title' }, 'My first app');

Wenn Sie mehrere Elemente benötigen:

javascript
[m('h1', { class: 'title' }, 'My first app'), m('button', 'A button')];

Und so weiter:

javascript
m('main', [
  m('h1', { class: 'title' }, 'My first app'),
  m('button', 'A button'),
]);

Live-Beispiel ​

var root = document.body;

m.render(root, [
  m('main', [
    m('h1', { class: 'title' }, 'My first app'),
    m('button', 'A button'),
  ]),
]);

Hinweis: Wenn Sie die <html>-Syntax bevorzugen, können Sie sie über ein Babel-Plugin verwenden.

jsx
// HTML-Syntax über das JSX-Plugin von Babel
<main>
  <h1 class="title">My first app</h1>
  <button>A button</button>
</main>

Komponenten ​

Eine Mithril.js-Komponente ist ein Objekt mit einer view-Funktion. Hier ist der obige Code als Komponente:

javascript
var Hello = {
  view: function () {
    return m('main', [
      m('h1', { class: 'title' }, 'My first app'),
      m('button', 'A button'),
    ]);
  },
};

Um die Komponente zu aktivieren, verwenden wir m.mount.

javascript
m.mount(root, Hello);

Wie zu erwarten, erzeugt dies folgendes Markup:

html
<main>
  <h1 class="title">My first app</h1>
  <button>A button</button>
</main>

Die Funktion m.mount ähnelt m.render, aktiviert aber anstelle des einmaligen Renderns von HTML das automatische Neuzeichnungssystem von Mithril.js. Um zu verstehen, was das bedeutet, fügen wir einige Ereignisse hinzu:

javascript
var count = 0; // eine Variable hinzugefügt

var Hello = {
  view: function () {
    return m('main', [
      m('h1', { class: 'title' }, 'My first app'),
      // die nächste Zeile geändert
      m(
        'button',
        {
          onclick: function () {
            count++;
          },
        },
        count + ' clicks'
      ),
    ]);
  },
};

m.mount(root, Hello);

Wir haben ein onclick-Ereignis auf der Schaltfläche definiert, das eine Variable count inkrementiert (die oben deklariert wurde). Wir rendern jetzt auch den Wert dieser Variablen in der Schaltflächenbeschriftung.

Sie können nun die Beschriftung der Schaltfläche aktualisieren, indem Sie auf die Schaltfläche klicken. Da wir m.mount verwendet haben, müssen Sie m.render nicht manuell aufrufen, um die Änderungen in der Variablen count auf das HTML anzuwenden. Mithril.js erledigt dies für Sie.

Wenn Sie sich über die Leistung wundern, stellt sich heraus, dass Mithril.js sehr schnell beim Rendern von Aktualisierungen ist, da es nur die Teile des DOM berührt, die es unbedingt benötigt. In unserem obigen Beispiel ist der Text in der Schaltfläche der einzige Teil des DOM, den Mithril.js tatsächlich aktualisiert, wenn Sie auf die Schaltfläche klicken.

Live-Beispiel ​

var root = document.body;
var count = 0; // eine Variable hinzugefügt

var Hello = {
  view: function () {
    return m('main', [
      m(
        'h1',
        {
          class: 'title',
        },
        'My first app'
      ),
      m(
        'button',
        {
          onclick: function () {
            count++;
          },
        },
        count + ' clicks'
      ),
    ]);
  },
};

m.mount(root, Hello);

Routing ​

Routing beschreibt den Übergang zwischen verschiedenen Ansichten innerhalb einer Anwendung.

Fügen wir eine Begrüßungsseite hinzu, die vor unserem Klick-Counter angezeigt wird. Zuerst erstellen wir eine Komponente dafür:

javascript
var Splash = {
  view: function () {
    return m('a', { href: '#!/hello' }, 'Enter!');
  },
};

Wie Sie sehen, rendert diese Komponente einfach einen Link zu #!/hello. Der #!-Teil wird als Hashbang bezeichnet und ist eine gängige Konvention, die in Single-Page-Anwendungen verwendet wird, um anzugeben, dass das, was danach kommt (der /hello-Teil), ein Routenpfad ist.

Da wir nun mehr als einen Bildschirm haben werden, verwenden wir m.route anstelle von m.mount.

javascript
m.route(root, '/splash', {
  '/splash': Splash,
  '/hello': Hello,
});

Die Funktion m.route verfügt weiterhin über dieselbe automatische Neuzeichnungsfunktionalität wie m.mount und ermöglicht auch die URL-Erkennung. Mit anderen Worten, sie teilt Mithril.js mit, was zu tun ist, wenn ein #! in der URL gefunden wird.

Das "/splash" direkt nach root bedeutet, dass dies die Standardroute ist, d. h. wenn der Hashbang in der URL nicht auf eine der definierten Routen verweist (/splash und /hello in unserem Fall), leitet Mithril.js zur Standardroute um. Wenn Sie die Seite also in einem Browser öffnen und Ihre URL https://localhost lautet, werden Sie zu https://localhost/#!/splash umgeleitet.

Wie Sie erwarten würden, gelangen Sie durch Klicken auf den Link auf der Startseite zum Klick-Counter-Bildschirm, den wir zuvor erstellt haben. Beachten Sie, dass Ihre URL jetzt auf https://localhost/#!/hello verweist. Sie können mit den Zurück- und Weiter-Schaltflächen des Browsers zur Startseite zurückkehren.

Live-Beispiel ​

var root = document.body;
var count = 0;

var Hello = {
  view: function () {
    return m('main', [
      m(
        'h1',
        {
          class: 'title',
        },
        'My first app'
      ),
      m(
        'button',
        {
          onclick: function () {
            count++;
          },
        },
        count + ' clicks'
      ),
    ]);
  },
};

var Splash = {
  view: function () {
    return m(
      'a',
      {
        href: '#!/hello',
      },
      'Enter!'
    );
  },
};

m.route(root, '/splash', {
  '/splash': Splash,
  '/hello': Hello,
});

XHR ​

Grundsätzlich ist XHR nur eine Möglichkeit, mit einem Server zu kommunizieren.

Ändern wir unseren Klick-Counter, um Daten auf einem Server zu speichern. Für den Server verwenden wir REM, eine Mock-REST-API, die für Spielzeug-Apps wie dieses Tutorial entwickelt wurde.

Zuerst erstellen wir eine Funktion, die m.request aufruft. Die url gibt einen Endpunkt an, der eine Ressource darstellt. Die method spezifiziert die Art der Operation (typischerweise die PUT-Methode für Upserts). body ist die Nutzlast, die wir an den Endpunkt senden, und withCredentials aktiviert Cookies (eine Voraussetzung für die REM-API).

javascript
var count = 0;
var increment = function () {
  m.request({
    method: 'PUT',
    url: '//mithril-rem.fly.dev/api/tutorial/1',
    body: { count: count + 1 },
    withCredentials: true,
  }).then(function (data) {
    count = parseInt(data.count);
  });
};

Durch Aufrufen der Inkrementfunktion wird ein Objekt {count: 1} zum Endpunkt /api/tutorial/1 Upsert . Dieser Endpunkt gibt ein Objekt mit demselben count-Wert zurück, der an ihn gesendet wurde. Beachten Sie, dass die Variable count erst aktualisiert wird, nachdem die Anfrage abgeschlossen ist, und sie wird jetzt mit dem Antwortwert vom Server aktualisiert.

Ersetzen wir den Ereignisbehandler in der Komponente, um die Funktion increment aufzurufen, anstatt die Variable count direkt zu inkrementieren:

javascript
var Hello = {
  view: function () {
    return m('main', [
      m('h1', { class: 'title' }, 'My first app'),
      m('button', { onclick: increment }, count + ' clicks'),
    ]);
  },
};

Ein Klick auf die Schaltfläche sollte nun den Zähler aktualisieren.

Live-Beispiel ​

var root = document.body;
var count = 0;

var increment = function () {
  m.request({
    method: 'PUT',
    url: '//mithril-rem.fly.dev/api/tutorial/1',
    body: { count: count + 1 },
    withCredentials: true,
  }).then(function (data) {
    count = parseInt(data.count);
  });
};

var Hello = {
  view: function () {
    return m('main', [
      m(
        'h1',
        {
          class: 'title',
        },
        'My first app'
      ),
      m(
        'button',
        {
          onclick: increment,
        },
        count + ' clicks'
      ),
    ]);
  },
};

m.mount(root, Hello);

Wir haben behandelt, wie man HTML erstellt und aktualisiert, Komponenten erstellt, Routen für eine Single-Page-Anwendung definiert und über XHR mit einem Server interagiert.

Nachdem Sie sich mit den Grundlagen der Mithril.js-API vertraut gemacht haben, sollten Sie sich unbedingt das einfache Anwendungs-Tutorial ansehen. Dieses Tutorial führt Sie durch den Aufbau einer realistischen Anwendung.

Pager
Nächste SeiteInstallation

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

https://mithril.js.org

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors