npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

rxjs-easy-store

v1.1.7

Published

A store library based on rxjs can handle data sharing of multiple modules and interactive response of different modules, which is simple and easy to use.

Readme

rxjs-easy-store

  • RXJS based on a simple and lightweight state management tool
  • Each module or function point can create its own store
  • The same store can be used by multiple modules to ensure data sharing and data interaction between modules
  • Global dispatch action to any store
  • A higher-order component is provided for react to allow better connections to the store

Installation

$ npm install --save rxjs-easy-store

rxjs-easy-store currently provides six methods

  1. createStore
  2. removeStore
  3. getStore
  4. dispatch
  5. inject (A higher-order component provided for react)
  6. registerMiddleware

Example

createStore(object)

createStore({
    // The store name needs to be unique
    name: 'demo',
    // Component state
    state: {
        list: [{ name: 'XXX', id: 1 }]
    },
    // Process state to generate a new state
    reducers: {
        getList: (action, state) => {
            state.list = action.payload.data
            return state
        }
    },
    // Side effects handling can do ajax requests and business logic processing
    // Methods in effects are passed into injected components by default
    effects: {
       getList(action, state){
         ajax('url')).subscribe(res => {
            // dispatch action
            dispatch({
               name: 'workbook',
               type: 'getList',
               payload: {
                   data: res.value
               }
           })
         })
       }
    }
})

dispatch(action)

dispatch({
    // Same name as defined in the store
    name: 'demo', 
    // The reducers method name remains the same in the store
    type: 'getList',
    // The observer does not respond, and the component does not render.
    suspens: true,
    payload: {
        data: res.value
    }
})

getStore(name)

Get store can be store of any module (data sharing across modules)

const demoStore = getStore('demo')

removeStore(name)

Remove the store of any module, Returns a Boolean value

const removeRes = removeStore('demo')

inject(mapStateToProps, options)

Higher-order components used on react

inject(
	// The store parameter is the collection of all stores
	// You can store the data you need to pass into the component
	(store, props) => {
         return {
             list: store.demoStore.list,
             ...
         }
    },
    {
        store: 'demoStore', // Current sotre name

        /**
          Can respond to multiple stores
          When the values of store1 and store2 change and 
          the current component depends on the values in the store, 
          the current component will render again 
        */ 

        dependentStores: ['store1','store2'],
        forwardedRef?: boolean, // True is required when using ref
    }
)

registerMiddleware([middleware1, middleware2])

const middleware1 = store => next => (action, state) => {
     // Do something
     // ...
     next(action, state)
}
registerMiddleware([middleware1, ...])

Use rxjs-easy-store on react

// demoRxStore.js
import { createStore, dispatch}  from 'rxjs-easy-store'
import { from } from 'rxjs'
import { ajax } from 'rxjs/ajax';

export default createStore({
    name: 'demoStore',
    state: {
        list: [{ name: 'xx', id: 1 }]
    },
    reducers: {
        getList: (action, state) => {
            state.list = [...action.payload.data]
            return state
        },
        add: (action, state) => {
            state.list.push({...action.payload.data})
            return state
        }
    }, 
    effects: {
        getList: (params) => {
            from(ajax('url')).subscribe(res => {
                dispatch({
                    name: 'demoStore',
                    type: 'getList',
                    payload: {
                        data: res.value
                    }
                })
            })
        },
        add: (params) => {
          from(ajax({
               url: 'https://httpbin.org/post',
               method: 'POST',
               body: params,
          })).subscribe(res => {
             dispatch({
                 name: 'demoStore',
                 type: 'add',
                 payload: {
                    data: res
                 }
             })
          })
        }
    }
})

// A.jsx React component

import { inject, dispatch }  from 'rxjs-easy-store'
function A(props) {
    return (
       <div>
        {
            props.list.map(item => <div key={item.id}>{item.name}</div>)
        }
        // effects method can be obtained directly through props
        <button onClick={() => props.add({name:'xxx'}))
        }}>click</button>
    </div>
  )
}

export default inject(
    (store, props) => ({
        list: store.demoStore.list
    }),]
    {
        store: 'demoStore'
    }
)(A)