Skip to content

Instantly share code, notes, and snippets.

@akiva
Created February 5, 2016 01:46
Show Gist options
  • Save akiva/3ddc16a7afcb0cbcc608 to your computer and use it in GitHub Desktop.
Save akiva/3ddc16a7afcb0cbcc608 to your computer and use it in GitHub Desktop.
var h = require('virtual-dom/h')
var diff = require('virtual-dom/diff')
var patch = require('virtual-dom/patch')
var createElement = require('virtual-dom/create-element')
var Delegator = require('dom-delegator')
var sendChange = require('value-event/change')
Delegator()
var state = main({ actions: {} }, update)
state.actions = Object.keys(state.actions).reduce(function (hash, fn) {
hash[fn] = Delegator.allocateHandle(state.actions[fn].bind(null, state))
return hash
}, {})
function header (state, update) {
state.name = state.name || ''
state.actions.handleNameChange = actions(update).handleNameChange
return state
function actions(update) {
return {
handleNameChange: function (state, data) {
state.name = data.name
update(state)
}
}
}
}
header.render = function (state) {
return h('header', [
h('input', {
name: 'name',
value: state.name,
'ev-event': sendChange(state.actions.handleNameChange)
}),
h('h1', 'Hello' + (state.name ? ', ' + state.name : '')),
])
}
function main(state, update) {
state = header(state, update)
return state
}
main.render = function (state) {
return h('main', [
header.render(state)
])
}
var tree = main.render(state)
var rootNode = createElement(tree)
document.body.appendChild(rootNode)
function update(state) {
var newTree = main.render(state)
var patches = diff(tree, newTree)
patch(rootNode, patches)
tree = newTree
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment