Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chiefgui/reswitch
A tiny library to write friendly reducers with less boilerplate.
https://github.com/chiefgui/reswitch
javascript react reducer reducers redux redux-saga switch
Last synced: about 1 month ago
JSON representation
A tiny library to write friendly reducers with less boilerplate.
- Host: GitHub
- URL: https://github.com/chiefgui/reswitch
- Owner: chiefGui
- License: mit
- Created: 2016-03-30T03:53:02.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-03-13T13:52:30.000Z (almost 8 years ago)
- Last Synced: 2024-04-27T00:06:59.134Z (8 months ago)
- Topics: javascript, react, reducer, reducers, redux, redux-saga, switch
- Language: JavaScript
- Homepage:
- Size: 54.7 KB
- Stars: 38
- Watchers: 5
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# reswitch v1.0.0 [![Build Status](https://travis-ci.org/chiefGui/reswitch.svg?branch=master)](https://travis-ci.org/chiefGui/reswitch)
A tiny library to write friendly reducers with less boilerplate.
### Install
`yarn add reswitch` or `npm install reswitch --save`
### Usage
Its usage couldn't be simpler: you pass as much arguments as you need to the
`reswitch` function, being the odd ones the actions dispatched and the
even ones the state the action will return:```js
/* /reducers/users.js */import reswitch from 'reswitch'
import {USERS_GET, USERS_GET__SUCCESS, USERS_GET__FAILURE} from 'consts/users'const INITIAL_STATE = {areLoading: false, hasError: false, users: null}
const users(state = INITIAL_STATE, action) => reswitch(
USERS_GET,
{...defaultState, areLoading: true},USERS_GET__SUCCESS,
{...defaultState, areLoading: false, users: action.users},USERS_GET__FAILURE,
{...defaultState, areLoading: false, hasError: true}
)(state, action.type)export default users
```**Arrays are also welcomed:**
```js
reswitch(
ADD_TODO,
[...state.todos, action.todo]
)(state, action.type)
```**As well as a function:**
```js
reswitch(
REMOVE_TODO,
() => state.todos.filter(todo => todo.id !== action.todo.id)
)(state, action.type)
```The default action is the current state of your reducer. You can customise it
by just passing an `object`, `array` or `function` as the last argument of
`reswitch`, without any explicit action:```js
reswitch(
ADD_TODO,
[...state.todos, action.todo],() => sort(state.todos)
)(state, action.type)
```That's it.
### Tests
`yarn test` or `npm test`
### Motivation
I personally don't like those huge amounts of `switch`es. Tokens out and about,
needless. Too much verbosity. To describe what I'm saying, this:![](http://i.imgur.com/VTfXQdY.png)
Becomes this:
![](http://i.imgur.com/dOMlzER.png)
### License
MIT