Skip to content

edkalina/borex

Repository files navigation

Borex

Borex is helper library for redux.

Learn it by Documentation (sorry, it is still draft in russian).

Also check rewritten counter example and another remake with self-reducing actions. The same for TodoMVC example (remake with self-reducing actions).

Key features

  • Write less code with redux
  • FSA compliant actions
  • Fat action creators (with action enhancers)
  • Self-reducing actions
  • Easy data manipulation in reducers (with reducer helpers)
  • Simple side-effects
  • Extendable: create your own enhancers and helpers
  • Flexible: use it any way you like

Action helper

npm install -S borex-actions

borex-actions provides utilities for action creating.

import actionCreator from 'borex-actions/actionCreator';
import setPayload from 'borex-actions/setPayload';
import setMeta from 'borex-actions/setMeta';
import setType from 'borex-actions/setType';
import withReducerIn from 'borex-actions/withReducerIn';


export const increment = actionCreator();
export const decrement = actionCreator();

export const addItem = actionCreator(
  setPayload((id, text) => ({ id, text }))
);

export const fatAction = actionCreator(
  setType('Fat action'),
  setPayload((id, text) => ({ id, text })),
  setMeta('analytics', (id, text) => ({ event: 'fat-action', id, text })),
  withReducerIn('data.list', (state, action) => [...state, action.payload]),
);

Reducer helpers

npm install -S borex-reducers

borex-reducers provides utilities for reducer declaration.

import createReducer from 'borex-reducers/createReducer';
import createReducerIn from 'borex-reducers/createReducerIn';
import composeReducers from 'borex-reducers/composeReducers';
import appendIn from 'borex-reducers/appendIn';

import { increment, decrement, addItem } from './actions';

const counterReducer = createReducerIn('counter', on => {
  on(increment, counter => counter + 1);
  on(decrement, counter => counter - 1);
});

const dataReducer = createReducer(on => {
  on(addItem, appendIn('data.list', data => { ...data, createdAt: Date.now() }));
});

const rootReducer = composeReducers(dataReducer, counterReducer);

Autotype babel plugin

npm install -D babel-plugin-borex-autotype

.babelrc

{
  "plugins": [
    "babel-plugin-borex-autotype"
  ]
}

This plugin inserts names for all anonymous actionCreator calls.

Input(counter.js):

const increment = actionCreator();

Output:

const increment = actionCreator('counter/increment');

Check plugin documentation page for more details.

Name and logo

The idea is

borex = BOilerplate REducer for reduX

Also it looks like Boreas with super-duper modern -X suffix :) This fact explains logo (Boreas is Greek god of North Wind).

About

Boilerplate reducer for Redux

Resources

License

Stars

Watchers

Forks

Packages

No packages published