diff options
Diffstat (limited to 'src/store')
-rw-r--r-- | src/store/index.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..bcb65d6 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,27 @@ +class Store { + constructor(reducer, catcher) { + this.reducer = reducer; + this.catcher = catcher; + this.state = this.reducer(undefined, {}); + } + + dispatch(action) { + if (action instanceof Promise) { + action.then((a) => { + this.state = this.reducer(this.state, a); + }).catch(this.catcher) + } else { + try { + this.state = this.reducer(this.state, action); + } catch (e) { + this.catcher(e); + } + } + } +} + +const empty = () => {}; + +export function createStore(reducer, catcher = empty) { + return new Store(reducer, catcher); +} |