An open API service indexing awesome lists of open source software.

https://github.com/toplan/redux-on

Store enhancer for redux which support accurately subscribe
https://github.com/toplan/redux-on

enhancer redux redux-on subscribe

Last synced: about 2 months ago
JSON representation

Store enhancer for redux which support accurately subscribe

Awesome Lists containing this project

README

        

redux-on
==============

[![build status](https://img.shields.io/travis/toplan/redux-on/master.svg?style=flat-square)](https://travis-ci.org/toplan/redux-on)
[![npm version](https://img.shields.io/npm/v/redux-on.svg?style=flat-square)](https://www.npmjs.com/package/redux-on)
[![npm downloads](https://img.shields.io/npm/dm/redux-on.svg?style=flat-square)](https://www.npmjs.com/package/redux-on)

Store enhancer for [redux](https://github.com/reactjs/redux) which support accurately subscribe.

## Install

```js
npm i --save redux-on
```

## Usage

```js
import { createStore, applyMiddleware, compose } from 'redux'
import accuratelySubscribe from 'redux-on'

const enhancer = compose(
applyMiddleware(...middleware),
accuratelySubscribe()
)
const store = createStore(reducer, initialState, enhancer)

// example
const off = store.on((prevState, state) => {
return prevState.user !== state.user
}, (prevState, state) => {
alert(`Hi, ${state.user.name}, welcome!`)
})
```

## Api

#### on([type], [predicate], handler, [once])

Adds a change handler. It will be called any time an action with specified type dispatched
or successful predication.

###### Arguments
1. `type` (String): The type of action.
2. `predicate` (Function): The logic of predication. It will be called with two parameters: `prevState`, `state`. Need to returns a boolean value.
3. `handler` (Function): The change handler. It will be called with two parameters: `prevState`, `state`.
4. `once` (Boolean): Whether to handle change only once. Default `false`.

###### Returns
(Function): A function that drop the change handler.

###### Examples
```js
// listen customer change by action type.
const off = store.on('CUSTOMER', (prevState, state) => {
alert(`Hi, ${state.customer.name}! welcome to the bar.`)
})
// listen customer change by predication.
const off1 = store.on(
(prevState, state) => prevState.customer !== state.customer,
(prevState, state) => alert(`Hi, ${state.customer.name}! welcome to the bar.`)
)
// listen customer change by action type and predication.
const off2 = store.on(
'CUSTOMER',
(prevState, state) => state.customer.age < 18,
(prevState, state) => alert(`Hey, boy! Can't drink!`)
)
// cancel listen
off()
```

#### once([type], [predicate], handler)

Adds a change handler. It will be called only once an action with specified type dispatched
or successful predication.

###### Arguments
1. `type` (String): The type of action.
2. `predicate` (Function): The logic of predication. It will be called with two parameters: `prevState`, `state`. Need to returns a boolean value.
3. `handler` (Function): The change handler. It will be called with two parameters: `prevState`, `state`.

###### Returns
(Function): A function that drop the change handler.

###### Examples
```js
store.once('CUSTOMER', (prevState, state) => {
alert(`Hey, you are the first customer, free drinking tonight!`)
})
// or
store.once(
(prevState, state) => !prevState.customer && state.customer,
(prevState, state) => alert(`Hey, you are the first customer, free drinking tonight!`)
)
```

## License

MIT