0.4.2 • Published 9 years ago

reduxerit v0.4.2

Weekly downloads
7
License
ISC
Repository
github
Last release
9 years ago

reduxerit

reduxerit is strongly influenced from redux-modifiers (https://github.com/calvinfroedge/redux-modifiers), It try to semplify writing the redux reducer, but without using immutablejs.

it is intended to work with redux-actions (https://github.com/acdlite/redux-actions) , but it is not mandatory.

###How it looks like:

import { handleActions } from 'redux-actions'
import { set, removeIdx,push } from 'reduxerit'

const reducerToDoList = handleActions({
  
  'SET_TITLE': set('title'),
  'ADD_ITEM': push('items'),
  'REMOVE_ITEM': removeIdx('items'),
}, 
{
  title:"",
  items:[]
});

##DOCS

##simple example:

often you want just assign the entire payload of your action to a particular reducer. you can do it like this

import { handleActions } from 'redux-actions'
import { set, removeIdx,push } from 'reduxerit'

const apiResponse = handleActions({
  'RECEVE_RESPONSE': set()
}, {})

now if you raise an action with a payload, you will see the entire apiResponse state equals to the palyload

  store.dipatch({type:'RECEVE_RESPONSE', payload:{ data:[]}}  )

now store.getState().apiResponse will be js { data:[]}}

the reducer without reduxerit would be:

/*WITHOUT REDUXERIT */  
const apiResponse = handleActions({
  'RECEVE_RESPONSE': (state, action) => ({
      ...state,
      ...action.payload
   })
},{})

why you have to use set() and not set? becouse the first argument can be a subpatch of the state you want to modify. Let's do an example:

you have an api witch returns you {data:[],pages:{cur:1, totPages:100} }. Let's say that you have 2 methods in this api, 1 to get the whole response and one to refresh just totPages. With reduxerit you can do it like this:

const apiResponse = handleActions({
  'RECEVE_RESPONSE': set(),
  'RECEVE_UPDATED_TOT_PAGES':set(['pages', 'totPages'])
},{})

let's see the code without reduxerit:

/* WITHOUT REDUXERIT*/
const apiResponse = handleActions({
  'RECEVE_RESPONSE': (state, action) => ({
     ...state,
     ...action.payload
   }),
  'RECEVE_UPDATED_TOT_PAGES':(state, action) => ({
     ...state,
     pages:{
       ...state.pages,
       totPages: action.payload
     }
   })
}, {})

lot of "boilerplate", right?

##when to NOT use reduxerit

redux comes with the combineReducers function, so you should use it as mutch as you can. as intance, if you need a "loading" status for the api, you should use combineReducers rather then reduxerit:

const loading = handleActions({
  'SEND_REQUST': true  
  'RECEVE_RESPONSE':false
}, false)

const api = combineReducers({
  response:apiResponse,
  loading
})  

so don't use reduxerit if you don't need it!

##reduxerit api:

here are the reduxerit api:

reduxerit function (they all return a function like (state, action) => newState )

  • set
  • update
  • merge
  • deepmerge
  • remove
  • push
  • removeIdx

utils (all the function above are based from those utils functions):

0.4.2

9 years ago

0.4.1

10 years ago

0.4.0

10 years ago

0.3.4

10 years ago

0.3.3

10 years ago

0.3.2

10 years ago

0.3.1

10 years ago

0.3.0

10 years ago

0.2.3

10 years ago

0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago