JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 66
  • Score
    100M100P100Q69028F
  • License MIT

Middleware for redux-event-bus that emits events to subscribed listeners whenever actions are dispatched.

Package Exports

  • redux-event-bus

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (redux-event-bus) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

redux-event-bus

Middleware for redux that allows you to subscribe to actions that are dispatched to a redux store.

Installation

Install the package

npm install --save redux-event-bus

Then, to enable redux-event-bus:

const {
    EventBus,
    createEventBusMiddleware
} = require("redux-event-bus");
const {
    applyMiddleware,
    createStore
} = require("redux");
const rootReducer = require("./reducers/index");

const evBus = new EventBus();

const evBusMiddleware = createEventBusMiddleware(evBus);

const store = createStore(
    rootReducer,
    applyMiddleware(evBusMiddleware)
);

If you are using other middlewares

const {
    EventBus,
    createEventBusMiddleware
} = require("redux-event-bus");
const {
    applyMiddleware,
    compose,
    createStore
} = require("redux");
const rootReducer = require("./reducers/index");

const evBus = new EventBus();

const middlewares = [
    //Other middlewares
    createEventBusMiddleware(evBus),
];

const store = createStore(
    rootReducer,
    compose(applyMiddleware(...middlewares))
);

If you are using ES6 Imports, replace the line below using require with the import statement below in either example above.

//replace
const {
    EventBus,
    createEventBusMiddleware
} = require("redux-event-bus");
//with
import {
    EventBus,
    createEventBusMiddleware
} from "redux-event-bus";

Usage

Listen for events for a particular action

const store = createStore(reducers, middleware);// From above
//Imports
const evBus = new EventBus();
// Hook into redux e.x.: applyMiddleware
evBus.takeEvery("USER_LOGGED_IN", (action) => {
    if(action.user.isAdmin) {
        console.log("User is admin");
    }
});

store.dispatch({
    type: "USER_LOGGED_IN"
    user: {
        isAdmin: true
    }
}); //Will call function above

store.dispatch({
    type: "USER_LOGGED_IN"
    user: {
        isAdmin: false
    }
}); //Will call function above

Listen for events for a particular action only once

const store = createStore(reducers, middleware);// From above
//Imports
const evBus = new EventBus();
// Hook into redux e.x.: applyMiddleware
evBus.takeOne("USER_LOGGED_IN", (action) => {
    if(action.user.isAdmin) {
        console.log("User is admin");
    }
});

store.dispatch({
    type: "USER_LOGGED_IN"
    user: {
        isAdmin: true
    }
}); //Will call function above

store.dispatch({
    type: "USER_LOGGED_IN"
    user: {
        isAdmin: false
    }
}); //Will not call function above since it already has been called.

Cancel events

const store = createStore(reducers, middleware);// From above
//Imports
const evBus = new EventBus();
// Hook into redux e.x.: applyMiddleware
const cancelListener = evBus.takeEvery("USER_LOGGED_IN", (action) => {});
cancelListener();
store.dispatch({
    type: "USER_LOGGED_IN"
    user: {
        isAdmin: true
    }
}); //Will not call listener above since it was cancelled.

const handler = (action) => {};
evBus.takeOne("USER_LOGGED_IN", handler);
evBus.cancel("USER_LOGGED_IN", handler);

store.dispatch({
    type: "USER_LOGGED_IN"
    user: {
        isAdmin: true
    }
}); //Will not call listener above since it was cancelled.

License

Copyright 2018 Jonah Nestrick

MIT License