cool-store
v5.0.0
Published
CoolStore is a simple and powerful state store built on top of ImmerJS and RxJS
Downloads
6
Maintainers
Readme
CoolStore
CoolStore is an immutable state store built on top of ImmerJS and RxJS.
Hit the Star button if you love this project ⭐️
Installation
npm install --save cool-store rxjs
Usage
Examples
How to use CoolStore
?
1. Create Store
import { CoolStore } from 'cool-store';
interface User {
name: string;
email: string;
}
const initialState: User = {
name: null,
email: null,
};
const store = new CoolStore(initialState);
2. Set State
store.set(state => {
state.name = 'Vien Dinh';
state.email = '[email protected]';
});
3. Get State
const state = store.get();
console.log({ user: state });
4. Subscribe State with store.getChanges()
observable.
store.getChanges().subscribe(state => {
console.log({ user: state });
});
5. Reset State
store.reset();
# Advanced store.set()
method.
# Set Entire State
store.set({
name: 'Vien Dinh',
email: '[email protected]',
});
store.set(() => ({
name: 'Vien Dinh',
email: '[email protected]',
}));
# Set State Properties
store.set(state => {
state.name = 'Vien Dinh';
});
How to use AsyncCoolStore
?
1. Create Store
import { AsyncCoolStore, AsyncCoolState } from 'cool-store';
interface User {
name: string;
email: string;
}
const initialState: AsyncCoolState<User, Error> = {
loading: false,
data: null,
error: null,
};
const store = new AsyncCoolStore(initialState);
2. Set State
function getUser(id: number) {
store.setLoading();
fetch('https://jsonplaceholder.typicode.com/users/' + id)
.then(res => res.json())
.then(data => store.setData(data))
.catch(error => store.setError(error));
}
getUser(1); // execute the function
3. Subscribe State with store.getChanges()
observable.
store.getChanges().subscribe(({ loading, data, error }) => {
console.log({ loading, data, error });
});
You can also use store.get()
, store.set()
, store.reset()
methods with AsyncCoolStore
.
# Advanced store.setData()
method.
# Set Entire Data
store.setData({
name: 'Vien Dinh',
email: '[email protected]',
});
store.setData(() => ({
name: 'Vien Dinh',
email: '[email protected]',
}));
# Set Data Properties
store.setData(state => {
state.name = 'Vien Dinh';
});