Edit in JSFiddle

var logs = []

function log(vnode){
		logs.push([vnode.attrs.text, {active: vnode.state.active}])
}

var Button = {
    active: false,
    oninit: log,
    onbeforeupdate: log,
    view: function (vnode) {
        var onclick = function () {vnode.state.active = !vnode.state.active}
        return m("button", {onclick: onclick, style: vnode.state.active ? "color:red" : ""}, vnode.attrs.text)
    }
}

var button = m(Button, {text: "Inactive Button"})

var MainComponent = {
    view: function () {
        return [
            m(Button, {text: "Active Button", onclick: onclick}),
            Object.assign({}, button)
        ]
    }
}

m.render(document.body, [m("#a"), m("#b")])

m.mount(a, MainComponent)

m.mount(b, {
		view: function () {
    		return m("pre",
      			logs.map(function (log) {
            		return JSON.stringify(log) + '\n'
            })
      	)
    }
})