Reactive state management written in TypeScript with a minimal API and full power of RxJS!
This is a simple store that can be used to manage state. After instantiating the store, you can either set, update or get states values, with a subscribtion system to keep track of the store changes.
npm install rxeta
or
yarn add rxeta
- π Centralized state management
- π‘ Protected state (can't be mutated directly)
- β» State mutation using setters or updaters
- π Subscribe method to watch and react to desired state changes
- π Fully typed thanks to Typescript
- Create the state interface and the initial state
import { Store } from 'rxeta'
interface State {
counter: number
}
const initialState: State {
counter: 0
}
- Create the store instance
const store = new Store(initialState)
- Subscribe to the whole store or to a single key to react to changes
// subscribe to any state change
store.subscribe((state) => console.log('state change', state))
// subscribe to a specific key change
store
.select('counter')
.subscribe((value) => console.log('counter value change', value))
- Update or set a given state in the store
// set to a new value
store.set('foo', 100)
// update the value using an updater function that takes the current value as parameter and returns the new value
store.update('foo', (value) => value + 1)
Pull requests are welcome.
To run the production build use the npm build script:
npm run build
Before the build is actually made the tests will be executed, the dist folder will be removed and then the build will be made.
This library contains all tests in the ./src/Store.test.ts.
The tests are writen using mocha and chai.
To run the tests just use the npm test script:
npm run test
Please make sure to update tests as appropriate.
ISC License
Copyright (c) barthofu