You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
14 hours ago | |
|---|---|---|
| .. | ||
| lib | 14 hours ago | |
| README.md | 14 hours ago | |
| package.json | 14 hours ago | |
README.md
change-emitter
Listen for changes. Like an event emitter that only emits a single event type. Really tiny.
I extracted this from Redux's createStore() because I found it to be useful in other contexts. Use it where you want the most minimal event subscription implementation possible.
Usage
import { createChangeEmitter } from 'change-emitter'
const emitter = createChangeEmitter()
// Called `listen` instead of `subscribe` to avoid confusion with observable spec
const unlisten = emitter.listen((...args) => {
console.log(args)
})
emitter.emit(1, 2, 3) // logs `[1, 2, 3]`
unlisten()
emitter.emit(4, 5, 6) // doesn't log
Larger example
Here's a (partial) implementation of Redux's createStore:
const createStore = (reducer, initialState) => {
let state = initialState
const emitter = createChangeEmitter()
function dispatch(action) {
state = reducer(state, action)
emitter.emit()
return action
}
function getState() {
return state
}
return {
dispatch,
getState,
subscribe: emitter.listen
}
}