Skip to content
Mithril.js 2
Main Navigation GuíaAPI

Español

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

Español

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

Apariencia

Sidebar Navigation

API

API principal

m(selector, attributes, children)

render(elemento, vnodes)

mount(root, component)

route(root, defaultRoute, routes)

request(options)

parseQueryString(string)

buildQueryString(objeto)

buildPathname(objeto)

parsePathname(string)

trust(html)

fragment(attrs, children)

redraw()

censor(object, extra)

API opcional

stream()

Guía

En esta página

censor(object, extra) ​

Descripción ​

Devuelve un objeto clonado superficialmente, excluyendo los atributos de ciclo de vida y cualquier atributo personalizado especificado.

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

Firma ​

censored = m.censor(object, extra)

ArgumentoTipoRequeridoDescripción
objetoObjectSíUn mapa clave-valor.
extraArray<String>NoPropiedades adicionales que se deben omitir.
devuelveObjectEl objeto original si no hay propiedades para omitir; de lo contrario, un objeto clonado superficialmente con las propiedades excluidas.

Cómo leer firmas

Cómo funciona ​

Normalmente, no es necesario este método; basta con especificar los atributos deseados. Sin embargo, a veces es más conveniente pasar todos los atributos desconocidos a otro elemento. Esto puede ser razonable, pero puede llevar a un problema importante con los métodos de ciclo de vida, que podrían llamarse dos veces.

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, [
        // !!!
        // ...
      ]);
    },
  };
}

Esto parece inofensivo, pero crea un problema: se están enviando dos hits cada vez que se navega a esta vista. Aquí es donde entra m.censor: permite eliminar oncreate de los atributos, asegurando que se llame solo una vez y evitando comportamientos inesperados.

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

También se pueden encontrar problemas similares con las claves:

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,
        ]),
      ];
    },
  };
}

Esto terminaría lanzando un error porque esto es lo que Mithril.js ve al crear el 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'),
    [
      /* ... */
    ],
  ]),
];

Es poco probable que se note esto a primera vista, especialmente en escenarios mucho más complejos donde podría haber indirección y/u otros problemas. Para corregir esto, de manera similar, se debe censurar el atributo key. También se puede censurar el atributo personalizado pageTitle, ya que su presencia en el DOM no aporta ningún valor.

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

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors

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

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors