Files
buuh/examples/counter/app.js
T

36 lines
870 B
JavaScript
Raw Normal View History

// The classic choo counter. This one module is the whole app, and both
// sides consume it: the browser mounts it (import map resolves
// @choojs/html to the DOM renderer), Node stringifies it (same specifier
// resolves to the string renderer). That's the isomorphic contract.
import choo from '@choojs/core'
import html from '@choojs/html'
export default function createApp () {
const app = choo()
app.use(countStore)
app.route('/', mainView)
return app
}
function mainView (state, emit) {
return html`
<body>
<h1>count is ${state.count}</h1>
<button onclick=${onclick}>Increment</button>
</body>
`
function onclick () {
emit('increment', 1)
}
}
function countStore (state, emitter) {
state.count = state.count || 0
emitter.on('increment', function (count) {
state.count += count
emitter.emit('render')
})
}