- Minimal overhead and size
- Completely type-save, even if you access the state 'only' with strings
- Very minimal and easy to learn API
- Pass your own (optional) dispatchers
- Pass your own (optional) selectors
- Autocomplete/Error everything (even strings)
For a more advanced example take a look at the example.ts.
interface Todo {
id: TodoId;
done: boolean;
contents: any;
shared: any;
}
interface TodoState {
selectedTodo: Todo | null;
todo: Record<TodoId, Todo>;
username: string | null;
allDone: boolean;
}
const store = new Store<TodoState>(
// The initial state
{ todo: {}, selectedTodo: null, username: null, allDone: false },
);
// Logs the username every time the username changes
store.on('username').subscribe(console.log)
// Change the username
store.patch('huiibuh', 'username');
name | value |
---|---|
state | S |
state$ | Observable<S> |
?
stands for values which are infered. These values are typesave!
name | parameters | returns | description |
---|---|---|---|
setState | state S |
void | Completely replace the current state |
patch | value ?, ...path ? The accessor path to the property you want to update |
void | Update the value at a specific position of the state |
on | ...path ? The accessor path to the property you want to subscribe to changes to |
Observable<?> | Get an observable which notifies you whenever the value behind the path changes |
get | ...path ? The accessor path to the property you want to get |
? | The the value at a specific path. undefined if the path does not exist |
dispatch | dispatcher S The name of the dispatcher, ...args ?[] Whatever arguments have to be passed to the dispatcher |
Observable<S> | Dispatch an action which in turn will update the state. Returns the updated state |
select | selector ? The name of the selector |
Observable<?> | Select parts of the state with the name of a selector. Will update |
selectCurrent | selector ? The name of the selector |
? | Get the current value of a selector |