UNPKG

simple-store-js

Version:

Simple State Management: isomorphic, slim, quick

100 lines (64 loc) 2.82 kB
SimpleStore.js SimpleStore.js is a dead simple state manager for JavaScript and Node. It's intended to be isomorphic, discreet, and there for you in a pinch when more robust state managers like Redux are too much for the project. The best part? It's only 3.9kb (< 1.3kb gzipped). So you can safely include it in almost any context without exploding page sizes. # API SimpleStore.js exports a function that returns a state manager. That's it. That manager controls its own watchers, the store, and all of the other pageantry you may expect in such a tool. ```js import createStore from "simple-state-js" const myState = createStore() // Optional, if you're in the browser. Once you set it, you can use your state // manager anywhere. Just use document.appState.get/set/watch, etc. document.appState = myState // To set a node myState.set('myKey', "Hello, sir!") // To get that node console.log(myState.get('myKey')) // -> Hello, sir! // To watch a node for changes myState.watch('myKey', (newState, oldState) => { console.log(newState) }) myState.set('myKey', "Foo bar.") // -> Foo bar. ``` SimpleStore.js relies on `fast-deep-equal` to compare objects that are passed in as key values to decide when to update the state and watchers. Therefore, if your state key is a fairly large object and you need to fully replace it (e.g., from an API request), you can safely do so without having to worry about everything updating. ## Watchers Watchers are stored by a key and value so that they can be removed or replaced. ```js myState.set('myKey', 'Foo bar!') myState.watch('myKey', newState => { console.log('Watcher is on!') }, 'myWatcher') myState.set('myKey', "Hello world") // -> Watcher is on! myState.unwatch('myKey', 'myWatcher') myState.set('myKey', "Foo bar!") // -> (Outputs nothing) ``` ## Multiple State Objects Although it's not recommended, you can setup multiple state objects. ```js const firstStore = createStore({ a: 1 }), secondStore = creteStore({ a: 2 }) console.log(firstStore.get('a')) // -> 1 console.log(secondStore.get('a')) // -> 2 ``` ## Contributing Find bugs? Want to add a new feature? I accept pull requests that live up to SimpleStore.js' values: - Simple -- features must not add unnecessary complexity and bloat - Discreet -- use outside dependencies sparingly, and only slim, well-designed ones - Isomorphic -- nothing will be accepted that is not isomorphic - Small -- This module will never be more than 1.5kb gzipped and uglified - To measure the change to the end file size of your branch, use the [Clojure Compiler on default settings](http://closure-compiler.appspot.com/home) ### Testing ``` git clone https://github.com/baublet/simple-state-js.git npm install npm test ```