You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

redux-detector

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

redux-detector

Redux enhancer for pure detection of state changes.

0.5.3
Source
npmnpm
Version published
Weekly downloads
1.1K
-7.76%
Maintainers
1
Weekly downloads
 
Created
Source

Redux Detector

Npm version Build Status Coverage Status

Redux enhancer for pure detection of state changes.

Warning: API is not stable yet, will be from version 1.0

Installation

Redux Detector requires Redux 3.1.0 or later.

npm install --save redux-detector

This assumes that you’re using npm package manager with a module bundler like Webpack or Browserify to consume CommonJS modules.

To enable Redux Detector, use createDetectableStore:

import { createDetectableStore } from 'redux-detector';
import rootReducer from './reducers/index';
import rootDetector from './detectors/index';

const store = createDetectableStore(
  rootReducer,
  rootDetector
);

or if you have more complicated store creation, use createStore with createDetectorEnhancer:

import { createStore } from 'redux';
import { createDetectorEnhancer } from 'redux-detector';
import rootReducer from './reducers/index';
import rootDetector from './detectors/index';

const store = createStore(
  rootReducer,
  createDetectorEnhancer(rootDetector)
);

Motivation

Redux Detector enhancer allows you to use state changes detectors with redux. Detector is a simple and pure function which compares two states and returns action or list of actions for some states configurations. It can be used for reacting on particular state transitions.

type Detector<S> = <A extends Action>(prevState: S | undefined, nextState: S) => A | A[] | void

For example detector that checks if number of rows exceed 100 looks like this:

function rowsLimitExceededDetector(prevState, nextState) {
  if (prevState.rows.length <= 100 && nextState.rows.length > 100) {
    return { type: ROWS_LIMIT_EXCEEDED };
  }
}

You can also return array of actions to dispatch them.

Thanks to detectors purity they are predictable and easy to test. There is no problem with features like time-travel, etc.

Composition

Redux store can handle only one detector (and one reducer). But don't worry - you can combine them. To do this, use combineDetectors function.

// ./detectors/rootDetector.js
import { combineDetectors } from 'redux-detector';
import { fooDetector } from './fooDetector';
import { barDetector } from './barDetector';

export default combineDetectors(fooDetector, barDetector);

Detectors by default operates on global state, but if you want to make some reusable detector that is not binded to global state, you can use mountDetector function. With factory pattern it becomes very elastic.

// ./detectors/limitExceedDetector.js
export function createLimitExceedDetector(limit, action) {
  return function limitExceedDetector(prevState, nextState) {
    if (prevState <= limit && nextState > limit) {
      return action;
    }
  }
}

// ./detectors/rowsLimitExceedDetector.js
import { mountDetector } from 'redux-detector';
import { createLimitExceeedDetector } from './limitExceedDetector';

export const rowsLimitExceedDetector = mountDetector(
  state => state.rows.length,
  createLimitExceedDetector(100, ROWS_LIMIT_EXCEEDED)
);

Of course examples above are very trivial, but you can use it to solve more common problems like keeping state consistent (you can for example schedule resource fetch if some parameters changed).

Code Splitting

Redux Detector provides replaceDetector method on DetectableStore interface (store created by Redux Detector). It's similar to replaceReducer - it changes detector and dispatches { type: '@@detector/INIT' }.

Typings

If you are using TypeScript, you don't have to install typings - they are provided in npm package.

License

MIT

Keywords

redux

FAQs

Package last updated on 10 Mar 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts