Generator functions for synchronous Redux actions commonly used with redux-thunk. The reducers use [immutable] state, which supports more efficient state diffing. The following API is described as if the 'resource' being passed in is 'user'. As the resource changes, so to do the names of the actions and action creators associated with that resource:
Returns true
if the item is immutable, and false
otherwise.
Generates action types for a resource, which is a string. The return value will be an object that has three values:
- USER_FETCH_START
- USER_FETCH_SUCCESS _ USER_FETCH_ERROR
These action types are used in the other methods in this API, such as actionCreatorsFor
and reducersFor
.
Generates the following action creators for a resource:
- userFetchStart()
- userFetchSuccess(users)
- userFetchError(error)
These action creators create the expected action objects. See reducersFor
for information on what new state these action creators will produce.
Generates a reducer that handles those actions described in actionCreatorsFor
. The following action types are handled in the following ways:
Generated by calling the userFetchStart() function. This will produce the following variations in the next state returned by the reducer:
- isFetching: true
- error: null All other values will remain consistent with the previous state of the reducer.
Generated by calling the userFetchSuccess(users) function. This will produce the following variations in the next state returned by the reducer:
- users: the users argument passed into the creator
- isFetching: false
- error: null All other values will remain consistent with the previous state of the reducer.
Generated by calling the userFetchError(error) function. This will produce the following variations in the next state returned by the reducer:
- users: the users argument passed in
- isFetching: false
- error: the error argument passed into the creator All other values will remain consistent with the previous state of the reducer.
This will generate the initial immutable state from a given reducer. For example, if the resource is 'user', the state will be an immutable object with the following characteristics:
- users: null
- isFetching: false
- error: null
The standard way to use the reducer generator is to provide the reducersFor
function as a wrapper around the default case in your own cases. For example, your reducer might look something like this:
import {
initialFrom,
reducersFor
} from 'redux-thunk-sync-creators'
const defaultUserReducer = reducersFor('user')
export default (state = initialFrom(defaultUserReducer), action) => {
switch (action.type) {
/** ... Your own custom cases **/
default:
return defaultUserReducer(state, action)
}
}