From 0ae39f1b67e269216ce3d45b870e448f6dbf21d7 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 13 Sep 2017 21:11:01 +0900 Subject: [PATCH] add simple store --- src/store/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/store/index.js 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); +}