Created
July 7, 2016 19:37
-
-
Save frontsideair/c1c5bf315394598b9aefabe9f16993cf to your computer and use it in GitHub Desktop.
Cycle.js with reducer-like events
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Cycle = require('@cycle/core'); | |
const {makeDOMDriver, div, button} = require('@cycle/dom'); | |
const {Observable} = require('rx'); | |
function intent({ DOM }) { | |
const incr$ = DOM | |
.select('.incr') | |
.events('click') | |
.map(() => prev => prev + 1); | |
const decr$ = DOM | |
.select('.decr') | |
.events('click') | |
.map(() => prev => prev - 1); | |
const reset$ = DOM | |
.select('.reset') | |
.events('click') | |
.map(() => () => 0); | |
return { incr$, decr$, reset$ }; | |
} | |
function model({ incr$, decr$, reset$ }) { | |
const count$ = incr$ | |
.merge(decr$) | |
.merge(reset$) | |
.startWith(0) | |
.scan((prev, change) => change(prev)); | |
return { count$ }; | |
} | |
function view({ count$ }) { | |
const DOM = count$.map(count => | |
div('.counter', [ | |
'Count: ' + count, | |
button('.incr', '+'), | |
button('.decr', '-'), | |
button('.reset', 'Reset') | |
]) | |
); | |
return { DOM }; | |
} | |
const main = sources => view(model(intent(sources))) | |
const sources = { | |
DOM: makeDOMDriver('#app') | |
} | |
Cycle.run(main, sources); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment