3.2 KiB
Migrating from v0.2.x to v1.x
v1.x is largely API-compatible with v0.2.x, but there are a few breaking changes.
configfunction- Cancelling redraw from event handlers
- Component
controllerfunction - Passing components to
m()
config function
In v0.2.x mithril provided a single lifecycle method, config. v1.x provides much more fine-grained control over the lifecycle of a vnode.
v0.2.x
m("div", {
config : function(element, isInitialized) {
// runs on each redraw
// isInitialized is a boolean representing if the node has been added to the DOM
}
});
v1.x
More documentation on these new methods is available in lifecycle-methods.md.
m("div", {
// Called before the DOM node is created
oninit : function(vnode) { ... },
// Called after the DOM node is created
oncreate : function(vnode) { ... },
// Called before the node is updated, return false to cancel
onbeforeupdate : function(vnode, old) { ... },
// Called after the node is updated
onupdate : function(vnode) { ... },
// Called before the node is removed, call done() when ready for the node to be removed from the DOM
onbeforeremove : function(vnode, done) { ... },
// Called before the node is removed, but after onbeforeremove calls done()
onremove : function(vnode) { ... }
});
If available the DOM-Element of the vnode can be accessed at vnode.dom.
Cancelling redraw from event handlers
m.mount() and m.route() still automatically redraw after a DOM event handler runs. Cancelling these redraws from within your event handlers is now done by setting the redraw property on the passed-in event object to false.
v0.2.x
m("div", {
onclick : function(e) {
m.redraw.strategy("none");
}
})
v1.x
m("div", {
onclick : function(e) {
e.redraw = false;
}
})
Component controller function
In v1.x there is no more controller property in components, use oninit instead.
v0.2.x
m.mount(document.body, {
controller : function() {
var ctrl = this;
ctrl.fooga = 1;
},
view : function(ctrl) {
return m("p", ctrl.fooga);
}
});
v1.x
m.mount(document.body, {
oninit : function(vnode) {
vnode.state.fooga = 1;
},
view : function(vnode) {
return m("p", vnode.state.fooga);
}
});
// OR
m.mount(document.body, {
oninit : function(vnode) {
var ctrl = this; // this is bound to vnode.state by default
ctrl.fooga = 1;
},
view : function(vnode) {
var ctrl = this; // this is bound to vnode.state by default
return m("p", ctrl.fooga);
}
});
Passing components to m()
In v0.2.x you could pass components as the second argument of m() w/o any wrapping required. To help with consistency in v1.x they must always be wrapped with a m() invocation.
v0.2.x
m("div", <component>);
v1.x
m("div", m(<component>));