flakestore
simple flux store implementation
Install
npm install --save flakestore
Example
sync flow
; const store = ; const INIT = 'INIT';const INCREMENTS = 'INCREMENTS';const DECREMENTS = 'DECREMENTS'; // handler (inspired by reducer)let { } // register handlers (pass handlers object)// when register handlers, these handlers are initializedstore; // { counter: 0 } // subscribe to change statestore; store; // { counter: 1 }store; // { counter: 2 }store; // { counter: 1 }store; // { counter: 2 }store; // { counter: 3 }
async flow
// handler (inspired by reducer)let { } // register handlers (pass handlers object)// when register handlers, these handlers are initializedstore; // { asyncCounter: 0 } // subscribe to change statestore; store; // { asyncCounter: 1 }store; // { asyncCounter: 2 }store; // { asyncCounter: 1 }store; // { asyncCounter: 2 }store; // { asyncCounter: 3 }
waitFor
FlakeStore supports waitFor
to wait dependency handlers
waitFor(handlerNames, callback)
- handlerNames [String|Array[String]]
- callback [Function(state, dependencies)]
- state: self state [Any]
- dependencies: dependencies state [Array[Object]]
; let { } store; store; // { counter: 1, oddOrEven: 'odd' }store; // { counter: 0, oddOrEven: 'even' }store; // { counter: 1, oddOrEven: 'odd' }store; // { counter: 2, oddOrEven: 'even' }store; // { counter: 3, oddOrEven: 'odd' }
merge handlers
mergeHandlers
supports type either array of handler[Object] or object handlers.
handler[Object] is the handler which return the state has type of Object.
mergeHandlers(handlers)
- handlers [Array[Handler[Object]]|Object{String:Handler}]
; let { }; let { }; let mergedObject = ;let mergedArray = ; store; store; // { mergedObject: { increments: { num: 1, count: 1 }, decrements: { num: 0, count: 0 } } }store; // { mergedObject: { increments: { num: 2, count: 2 }, decrements: { num: 0, count: 0 } } }store; // { mergedObject: { increments: { num: 3, count: 3 }, decrements: { num: 0, count: 0 } } }store; // { mergedObject: { increments: { num: 3, count: 3 }, decrements: { num: -1, count: 1 } } }store; // { mergedObject: { increments: { num: 3, count: 3 }, decrements: { num: -2, count: 2 } } } store; store; store; // { mergedArray: { num: 1, count: 1 } }store; // { mergedArray: { num: 2, count: 2 } }store; // { mergedArray: { num: 3, count: 3 } }store; // { mergedArray: { num: 2, count: 4 } }store; // { mergedArray: { num: 1, count: 5 } } store;
handling initialization
The register method returns Promise
, so you can call then
and handle initialization.
store ;
handling error
onError
is called if handlers throw exception while updating state.
store;
unregister handler
register and unregister are same syntax.
let { /* ... */ }; store; // registered!store; // unregistered!