A small, immutable, reactive and framework agnostic state store under 2KB powered by rxjs and immer with native typescript support. To be used with vanilla, react, preact, angular, vue or whatever you like.
import { Actions, Store } from 'small-store';
// state declaration
interface CounterState {
count: number;
}
// actions
enum CounterAction {
Increment = 'increment',
Decrement = 'decrement'
}
// action functions
const counterActions: Actions<CounterState, CounterAction> = {
[CounterAction.Increment]: () => state => {
state.count++;
return state;
},
[CounterAction.Decrement]: () => state => {
state.count--;
return state;
}
};
// the initial state
const initialCounterState: CounterState = {
count: 0
};
// creating the store
const counterStore = new Store<CounterState, CounterAction>(
initialCounterState,
counterActions
);
// subscribing to the store's state
counterStore.state$.subscribe(state => console.log(state));
// dispatching actions
counterStore.dispatch(CounterAction.Increment);
counterStore.dispatch(CounterAction.Increment);
counterStore.dispatch(CounterAction.Decrement);
See details and more examples in the docs.
Visit simbo.codes/small-store to read the documentation and the examples.
Requirements: node.js >=14, yarn >=1.22
# build using microbundle
yarn build
# watch and rebuild
yarn build:watch
# lint using prettier and eslint
yarn lint
# test using jest
yarn test
# watch and retest
yarn test:watch
# open coverage in default browser
yarn coverage:open
# check everything
yarn preflight
Requirements: docker
# pull slate image
docker pull slatedocs/slate
# serve docs on localhost:4567
yarn docs:serve
# build docs to ./docs-build
yarn docs:build