Skip to content
Mithril.js 2
Main Navigation GuideAPI

Français

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

Français

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

Apparence

Sidebar Navigation

Bien démarrer

Installation

Application Simple

Ressources

JSX

ES6+ sur les navigateurs anciens

Animations

Tests

Exemples

Intégration de librairies externes

Gestion des Chemins

Concepts clés

Nœuds du DOM virtuel

Composants

Méthodes de cycle de vie

Keys

Le système de rafraîchissement automatique

Divers

Comparaison des frameworks

Migration depuis la version 1.x

Migration depuis la v0.2.x

API

Sur cette page

Le système de rafraîchissement automatique ​

Mithril.js implémente un système de différenciation du DOM virtuel pour un rendu rapide. De plus, il offre divers mécanismes pour un contrôle précis du rendu d'une application.

Lorsqu'il est utilisé de manière idiomatique, Mithril.js utilise un système de rafraîchissement automatique qui synchronise le DOM chaque fois que des modifications sont apportées à la couche de données. Ce système s'active lorsque vous appelez m.mount ou m.route (mais reste désactivé si votre application est initialisée uniquement via des appels à m.render).

Le système de rafraîchissement automatique consiste simplement à déclencher une fonction de re-rendu en arrière-plan après l'exécution de certaines fonctions.

Après les gestionnaires d'événements ​

Mithril.js se rafraîchit automatiquement après l'exécution des gestionnaires d'événements DOM définis dans une vue Mithril.js :

javascript
var MyComponent = {
  view: function () {
    return m('div', { onclick: doSomething });
  },
};

function doSomething() {
  // Un rafraîchissement a lieu de manière synchrone après l'exécution de cette fonction.
}

m.mount(document.body, MyComponent);

Vous pouvez désactiver le rafraîchissement automatique pour des événements spécifiques en définissant e.redraw sur false.

javascript
var MyComponent = {
  view: function () {
    return m('div', { onclick: doSomething });
  },
};

function doSomething(e) {
  e.redraw = false;
  // Ne déclenche plus de rafraîchissement quand on clique sur la div.
}

m.mount(document.body, MyComponent);

Après m.request ​

Mithril.js se rafraîchit automatiquement après l'exécution de m.request :

javascript
m.request('/api/v1/users').then(function () {
  // Un rafraîchissement se produit après l'exécution de cette fonction.
});

Vous pouvez désactiver le rafraîchissement automatique pour une requête spécifique en définissant l'option background sur true :

javascript
m.request('/api/v1/users', { background: true }).then(function () {
  // Ne déclenche pas de rafraîchissement.
});

Après les changements de route ​

Mithril.js se rafraîchit automatiquement après les appels à m.route.set() et après les changements de route via des liens utilisant m.route.Link.

javascript
var RoutedComponent = {
  view: function () {
    return [
      // Un rafraîchissement se produit de manière asynchrone après le changement de route.
      m(m.route.Link, { href: '/' }),
      m('div', {
        onclick: function () {
          m.route.set('/');
        },
      }),
    ];
  },
};

m.route(document.body, '/', {
  '/': RoutedComponent,
});

Quand Mithril.js ne rafraîchit pas ​

Mithril.js ne se rafraîchit pas après setTimeout, setInterval, requestAnimationFrame, les résolutions natives de Promise et les gestionnaires d'événements de bibliothèques tierces (par exemple, les rappels Socket.io). Dans ces cas, vous devez appeler manuellement m.redraw().

Mithril.js ne se rafraîchit pas non plus après l'exécution des méthodes de cycle de vie. Des parties de l'interface utilisateur peuvent être rafraîchies après un gestionnaire oninit, mais d'autres parties peuvent déjà l'avoir été lorsqu'un gestionnaire oninit donné se déclenche. Les gestionnaires comme oncreate et onupdate se déclenchent après que l'interface utilisateur a été rafraîchie.

Si vous devez déclencher explicitement un rafraîchissement dans une méthode de cycle de vie, vous devez appeler m.redraw(), ce qui déclenchera un rafraîchissement asynchrone.

javascript
function StableComponent() {
  var height = 0;

  return {
    oncreate: function (vnode) {
      height = vnode.dom.offsetHeight;
      m.redraw();
    },
    view: function () {
      return m('div', 'This component is ' + height + 'px tall');
    },
  };
}

Mithril.js ne rafraîchit pas automatiquement les arbres vnode rendus via m.render. Cela signifie que les rafraîchissements ne se produisent pas après les événements et les appels à m.request pour les modèles qui ont été rendus via m.render. Ainsi, si votre architecture nécessite un contrôle manuel du moment où le rendu se produit (comme cela peut parfois être le cas lors de l'utilisation de bibliothèques telles que Redux), vous devez utiliser m.render au lieu de m.mount.

N'oubliez pas que m.render attend un arbre vnode, et m.mount attend un composant :

javascript
// Encapsulez le composant dans un appel m() pour m.render
m.render(document.body, m(MyComponent));

// N'encapsulez pas le composant pour m.mount
m.mount(document.body, MyComponent);

Mithril.js peut également éviter le rafraîchissement automatique si la fréquence des rafraîchissements demandés est supérieure à une image d'animation (généralement autour de 16 ms). Cela signifie, par exemple, que lors de l'utilisation d'événements à déclenchement rapide comme onresize ou onscroll, Mithril.js limitera automatiquement le nombre de rafraîchissements pour éviter les saccades.

Pager
Page précédenteKeys
Page suivanteComparaison des frameworks

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors

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

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors