Skip to content

Instantly share code, notes, and snippets.

@milankinen
Last active November 5, 2015 14:22
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save milankinen/a8ce116470208681a51e to your computer and use it in GitHub Desktop.
megablob@0.3.0-alpha1 aka "microblob" \o/
import React from "react"
import {render} from "react-dom"
import Bacon from "baconjs"
import {sum} from "lodash"
import {atom} from "megablob"
import {Combinator} from "megablob/react"
function init() {
const counters = atom([atom(0)])
const total =
counters.flatMapLatest(Bacon.combineAsArray).map(sum)
return Bacon.constant(
<Combinator>
<div>
Total counters: {counters.map(".length")} (total: {total})<br />
<button onClick={() => counters.swap(c => [...c, atom(0)])}>
Add
</button>
{counters.map(c => c.map(renderCounter))}
</div>
</Combinator>
)
}
const renderCounter = counter => {
const step = atom(1)
const inc = step.map(s => _ => counter.swap(c => c + s))
return (
<Combinator>
<div>
<div>
Counter {counter}
</div>
<button onClick={inc}>
Counter +{step}
</button>
<button onClick={() => step.swap(s => s + 1)}>
Step ++
</button>
</div>
</Combinator>
)
}
const $app = document.getElementById("app")
init().onValue(app => render(app, $app))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment