https://github.com/archakov06/yarlsm
Yet another redux like state manager.
https://github.com/archakov06/yarlsm
Last synced: over 1 year ago
JSON representation
Yet another redux like state manager.
- Host: GitHub
- URL: https://github.com/archakov06/yarlsm
- Owner: Archakov06
- Created: 2019-05-22T23:20:31.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-06-03T13:45:37.000Z (about 7 years ago)
- Last Synced: 2025-01-21T01:41:36.949Z (over 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 36.1 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
**Yarlsm** — Yet another redux like state manager.
Not for production. Made for fun and practice.
[](https://codesandbox.io/s/xenodochial-satoshi-l190y?fontsize=14)
## index.js
```js
import createStore from './store';
import reducers from './reducers';
const store = new createStore(reducers, {
tasks: [],
});
store.listen(({ type, data, state }) => {
console.log('state changed', state, type, data);
});
store.listen(({ type, data, state }) => {
console.log('Task deleted', 'TASKS:REMOVE');
});
store.dispatch('TASKS:ADD', 'Get started');
store.dispatch('TASKS:ADD', 'Create store');
store.dispatch('TASKS:ADD', 'removed');
store.dispatch('TASKS:REMOVE', 2);
store.dispatch('TASKS:ADD', 'Test store');
// state changed {tasks: ['Get started']} TASKS:ADD Get started
// state changed {tasks: ['Get started', 'Create store']} TASKS:ADD Create store
// state changed {tasks: ['Get started', 'Create store', 'removed']} TASKS:ADD removed
// state changed {tasks: ['Get started', 'Create store']} TASKS:REMOVE 2
// state changed {tasks: ['Get started', 'Create store', 'Test store']} TASKS:ADD Test store
```
## reducers.js
```js
export default {
tasks: (state, type, payload) => {
switch (type) {
case 'TASKS:ADD':
return [...state, payload];
case 'TASKS:REMOVE':
return state.filter((_, index) => index !== Number(payload));
default:
return state;
}
},
};
```