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

API

API principal

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 Opcional

stream()

Guia

Nesta página

censor(object, extra) ​

Descrição ​

Retorna um objeto clonado superficialmente, omitindo atributos de ciclo de vida e quaisquer atributos personalizados especificados.

javascript
var attrs = { one: 'two', enabled: false, oninit: function () {} };
var censored = m.censor(attrs, ['enabled']);
// {one: "two"}

Assinatura ​

censored = m.censor(object, extra)

ArgumentoTipoObrigatórioDescrição
objectObjectSimUm objeto chave-valor a ser processado.
extraArray<String>NãoPropriedades adicionais a serem omitidas.
retornaObjectO objeto original, se não houver propriedades a serem omitidas; caso contrário, um objeto clonado superficialmente com as propriedades removidas.

Como ler assinaturas

Como funciona ​

Normalmente, você não precisa deste método e pode simplesmente especificar os atributos desejados. No entanto, às vezes é mais conveniente repassar todos os atributos desconhecidos para outro elemento. Embora isso geralmente seja aceitável, pode levar a problemas com os métodos de ciclo de vida sendo chamados duas vezes.

javascript
function SomePage() {
  return {
    view: function () {
      return m(SomeFancyView, {
        oncreate: function () {
          sendViewHit(m.route.get(), 'some fancy view');
        },
      });
    },
  };
}

function SomeFancyView() {
  return {
    view: function (vnode) {
      return m('div', vnode.attrs, [
        // !!!
        // ...
      ]);
    },
  };
}

Isso pode parecer inofensivo, mas cria um problema: você está enviando duas requisições cada vez que esta view é acessada. É aqui que m.censor se torna útil: ele remove oncreate dos atributos, garantindo que seja chamado apenas uma vez e evitando comportamentos inesperados.

javascript
// Corrigido
function SomeFancyView() {
  return {
    view: function (vnode) {
      return m('div', m.censor(vnode.attrs), [
        // ...
      ]);
    },
  };
}

Você também pode encontrar problemas semelhantes com keys:

javascript
function SomePage() {
  return {
    view: function () {
      return m(
        Layout,
        {
          pageTitle: 'Some Page',
          key: someKey,
        },
        [
          // ...
        ]
      );
    },
  };
}

function Layout() {
  return {
    view: function (vnode) {
      return [
        m('header', [m('h1', 'My beautiful web app'), m('nav')]),
        m('.body', vnode.attrs, [
          // !!!
          m('h2', vnode.attrs.pageTitle),
          vnode.children,
        ]),
      ];
    },
  };
}

Isso resultaria em um erro lançando um erro porque é isso que o Mithril.js vê ao criar o vnode Layout:

javascript
return [
  m('header', [m('h1', 'My beautiful web app'), m('nav')]),
  m('.body', { pageTitle: 'Some Page', key: someKey }, [
    m('h2', 'Some Page'),
    [
      /* ... */
    ],
  ]),
];

Isso pode não ser óbvio à primeira vista, especialmente em cenários mais complexos com indireção e outros problemas. Para corrigir isso, você também precisa remover o atributo key. Você também pode censurar o atributo pageTitle, já que ele não tem utilidade no DOM.

javascript
// Corrigido
function Layout() {
  return {
    view: function (vnode) {
      return [
        m('header', [m('h1', 'My beautiful web app'), m('nav')]),
        m('.body', m.censor(vnode.attrs, ['pageTitle', 'key']), [
          m('h2', vnode.attrs.pageTitle),
          vnode.children,
        ]),
      ];
    },
  };
}
Pager
Anteriorredraw()
Próximostream()

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors

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

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors