31 lines
549 B
JavaScript
31 lines
549 B
JavaScript
|
export default function create (initialState) {
|
||
|
let state = initialState
|
||
|
const listeners = []
|
||
|
|
||
|
function setState (partial) {
|
||
|
state = { ...state, ...partial }
|
||
|
for (let i = 0; i < listeners.length; i++) {
|
||
|
listeners[i]()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getState () {
|
||
|
return state
|
||
|
}
|
||
|
|
||
|
function subscribe (listener) {
|
||
|
listeners.push(listener)
|
||
|
|
||
|
return function unsubscribe () {
|
||
|
const index = listeners.indexOf(listener)
|
||
|
listeners.splice(index, 1)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
setState,
|
||
|
getState,
|
||
|
subscribe,
|
||
|
}
|
||
|
}
|