redux-actions-helper
utilities for redux actions
Installation
npm install redux-actions-helper --save
createAction
createAction(
actionsName:string,
payloadCreator: function,
metaCreator: function,
)
-
payloadCreator: (args) => payload
default: (...args) => args
-
metaCreator: (args) => payload
default: (...args) => args
import { createAction } from 'redux-actions-helper';
export const toggleTODO = createAction(
'TOGGLE_TODO'
);
export const updateTODO = createAction(
'UPDATE_TODO', (task)=>({
id: task.id,
task
})
);
mapToAction then use it
this.props.toggleTODO(1)
this.props.updateTODO({
id: 1,
title: 'new'
})
handleActions
import { handleActions } from 'redux-actions-helper';
import * as todoActions from '../../actions/todo'
const initState = {
tasks: []
}
export default handleActions((on) => {
on(todoActions.toggleTODO, (state, action) => {
const taskId = action.payload
return {
...
}
})
on(todoActions.updateTODO, (state, action) => {
const {id, task} = action.payload
return {
...
}
})
}, initState)
async
add promise-middleware to middlewares
import { promiseMiddleware } from 'redux-actions-helper';
applyMiddleware(
...
promiseMiddleware,
...
)
import { createAction } from 'redux-actions-helper';
export const updateTODO = createAction(
'UPDATE_TODO', (task)=>{
return taskApi.update(task)
}
);
import { handleActions } from 'redux-actions-helper';
import * as todoActions from '../../actions/todo'
const initState = {
tasks: []
}
export default handleActions((on) => {
on(todoActions.updateTODO, (state, action) => {
const requestArgumens = action.payload[0]
return {
...
}
})
on.success(todoActions.updateTODO, (state, action) => {
const response = action.payload
const requestArgumens = action.meta[0]
return {
...
}
})
on.fail(todoActions.updateTODO, (state, action) => {
const error = action.payload
const requestArgumens = action.meta[0]
return {
...
}
})
}, initState)
createThunkAction
if you use thunk middleware, you can use createThunkAction
createThunkAction(
actionsName: string,
payloadCreator: ({ dispatch, getState }, args) => payload,
metaCreator: (args) => meta,
)
import { createThunkAction } from 'redux-actions-helper';
export const updateTODO = createThunkAction(
'UPDATE_TODO', ({ dispatch, getState }, task)=>{
const state = getState()
return {
id: task.id,
task,
operator: state.user.id
}
}
);
use it as same as createAction
this.props.updateTODO({
id: 1,
title: 'new'
})