@lifaon/rx-store
TypeScript icon, indicating that this package has built-in type declarations

1.1.1 • Public • Published

npm (scoped) npm NPM npm type definitions

🗜️ rx-store

rx-store provides state management for creating maintainable, explicit applications through the use of single state and actions in order to express state changes.

rx-store is extremely light and fast as opposed to classical Store library like redux, ngrx, ngxs, etc...

When should I use a Store for state management?

In particular, you might use a Store when you build an application with a lot of user interactions and multiple data sources, or when managing state in classes or global helpers are no longer sufficient.

Moreover, if you're working with Angular, React or rx-dom, using a Store is a good way to help you build large applications and keep a coherent state with it.

Example:

/* DEFINE STORE INTERFACES */

type IUser = Immutable<{
    name: string;
  }>

type IAppState = Immutable<{
  users: ImmutableArray<IUser>;
}>;

/* INIT THE STORE */

const APP_STORE = createStore<IAppState>({
  users: [],
});

/* ACTIONS */

const appendUser = createAction(APP_STORE, (state: IAppState, user: IUser): IAppState => {
  return {
    ...state,
    users: [...state.users, user],
  };
});

/* SELECTORS */

const userCountSelector = createSelector((state: IAppState) => state.users.length);
const userCount$ = mapState(APP_STORE, userCountSelector);


/* MY APP */

userCount$((count: number) => {
  console.log('user count:', count);
});
// outputs: 0

appendUser({ name: 'Alice' }); // outputs: 1
appendUser({ name: 'Bob' }); // outputs: 2

📦 Installation

yarn add @lifaon/rx-store
# or
npm install @lifaon/rx-store --save

This library supports:

  • common-js (require): transpiled as es5, with .cjs extension, useful for old nodejs versions
  • module (esm import): transpiled as esnext, with .mjs extension (requires node resolution for external packages)

In a node environment the library works immediately (no extra tooling required), however, in a browser environment, you'll need to resolve external imports thought a bundler like snowpack, rollup, webpack, etc... or directly using skypack: https://cdn.skypack.dev/@lifaon/rx-store

📕 Documentation

Readme

Keywords

none

Package Sidebar

Install

npm i @lifaon/rx-store

Weekly Downloads

4

Version

1.1.1

License

MIT

Unpacked Size

34.2 kB

Total Files

116

Last publish

Collaborators

  • lifaon74