nanostores
Version:
A tiny (265 bytes) state manager for React/Preact/Vue/Svelte with many atomic tree-shakable stores
22 lines (16 loc) • 446 B
JavaScript
export let effect = (stores, callback) => {
if (!Array.isArray(stores)) stores = [stores]
let unbinds = []
let lastRunUnbind
let run = () => {
lastRunUnbind && lastRunUnbind()
let values = stores.map(store => store.get())
lastRunUnbind = callback(...values)
}
unbinds = stores.map(store => store.listen(run))
run()
return () => {
unbinds.forEach(unbind => unbind())
lastRunUnbind && lastRunUnbind()
}
}