Skip to content
Mithril.js 2
Main Navigation GuiaAPI

Português – Brasil

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

Português – Brasil

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

Aparência

Sidebar Navigation

Começando

Instalação

Aplicativo Simples

Recursos

JSX

ES6+ em navegadores legados

Animações

Testes

Exemplos

Integração com Bibliotecas de Terceiros

Tratamento de Caminhos (Path Handling)

Conceitos-chave

Nós da DOM Virtual

Componentes

Métodos de ciclo de vida

Keys

O sistema de redesenho automático

Diversos

Comparação de Frameworks

Migrando da v1.x

Migração da v0.2.x

API

Nesta página

O sistema de redesenho automático ​

Mithril.js implementa um sistema de diffing de DOM virtual para renderização rápida e, além disso, oferece vários mecanismos para obter controle granular sobre a renderização de um aplicativo.

Quando utilizado de forma idiomática, o Mithril.js emprega um sistema de redesenho automático que sincroniza o DOM sempre que alterações são feitas na camada de dados. O sistema de redesenho automático é ativado quando você chama m.mount ou m.route (mas permanece desativado se seu aplicativo for inicializado apenas por meio de chamadas a m.render).

O sistema de redesenho automático consiste em acionar uma função de renderização nos bastidores assim que certas funções são concluídas.

Após manipuladores de eventos ​

Mithril.js redesenha automaticamente após manipuladores de eventos DOM que são definidos em uma view do Mithril.js:

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

function doSomething() {
  // um redesenho ocorre de forma síncrona após a execução desta função
}

m.mount(document.body, MyComponent);

Você pode desativar um auto-redesenho para eventos específicos definindo e.redraw como false.

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

function doSomething(e) {
  e.redraw = false;
  // não dispara mais um redesenho quando o elemento div é clicado
}

m.mount(document.body, MyComponent);

Após m.request ​

Mithril.js redesenha automaticamente após a conclusão de m.request:

javascript
m.request('/api/v1/users').then(function () {
  // um redesenho ocorre após a execução desta função
});

Você pode desativar um auto-redesenho para uma requisição específica definindo a opção background como true:

javascript
m.request('/api/v1/users', { background: true }).then(function () {
  // não aciona um redesenho
});

Após mudanças de rota ​

Mithril.js redesenha automaticamente após chamadas a m.route.set() e após mudanças de rota por meio de links usando m.route.Link.

javascript
var RoutedComponent = {
  view: function () {
    return [
      // um redesenho acontece assincronamente após a mudança da rota
      m(m.route.Link, { href: '/' }),
      m('div', {
        onclick: function () {
          m.route.set('/');
        },
      }),
    ];
  },
};

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

Quando o Mithril.js não redesenha ​

Mithril.js não redesenha após setTimeout, setInterval, requestAnimationFrame, resoluções diretas de Promise e manipuladores de eventos de bibliotecas de terceiros (por exemplo, callbacks do Socket.io). Nesses casos, você deve chamar manualmente m.redraw().

Mithril.js também não redesenha após métodos de ciclo de vida. Partes da UI podem ser redesenhadas após um manipulador oninit, mas outras partes da UI podem já ter sido redesenhadas quando um determinado manipulador oninit é disparado. Gatilhos como oncreate e onupdate são acionados após a UI ter sido redesenhada.

Se você precisar acionar explicitamente um redesenho dentro de um método de ciclo de vida, você deve chamar m.redraw(), que irá acionar um redesenho assíncrono.

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 não redesenha automaticamente árvores vnode que são renderizadas via m.render. Isso significa que os redesenhos não ocorrem após mudanças de evento e chamadas a m.request para templates que foram renderizados via m.render. Assim, se sua arquitetura requer controle manual sobre quando a renderização ocorre (como pode ser o caso ao usar bibliotecas como Redux), você deve usar m.render em vez de m.mount.

Lembre-se que m.render espera uma árvore vnode, e m.mount espera um componente:

javascript
// envolva o componente em uma chamada m() para m.render
m.render(document.body, m(MyComponent));

// não envolva o componente para m.mount
m.mount(document.body, MyComponent);

Mithril.js também pode evitar o auto-redesenho se a frequência de redesenhos solicitados for maior que um frame de animação (tipicamente em torno de 16ms). Isso significa, por exemplo, que ao usar eventos de disparo rápido como onresize ou onscroll, Mithril.js irá automaticamente limitar o número de redesenhos para evitar lentidão.

Pager
AnteriorKeys
PróximoComparação de Frameworks

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors

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

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors