Newer version
Idea of redux-saga-actions
has been reworked and published as redux-saga-routines
. Before using this package, please take a look at new one!
redux-saga-actions
An action creator for Redux Saga compatible with Redux Form. Forked from redux-form-saga
Why do I need this?
Reduce boilerplate from your source code when making requests to API or validating forms build on top of Redux Form.
Installation
yarn add redux-saga-actions
Important! redux-saga-actions
uses native ES2015 Promises, if the browser you are targeting doesn't support ES2015 Promises, you have provide a valid polyfill, such as the one provided by babel
.
Usage
First of all to enable redux-saga-actions
, you have to add actionsWatcherSaga
in your sagaMiddleware.run()
, for example like this:
const sagas = [yourFirstSaga, yourOtherSaga, ..., actionsWatcherSaga];
sagas.map(sagaMiddleware.run);
Then, use createAction
to in your code:
import { createAction } from 'redux-saga-actions';
const action = createAction('FETCH_DATA');
action(payload, dispatch);
function handleRequest() {
try {
const response = yield call(apiClient.request, '/some_url');
yield put(action.success(response.data));
} catch (error) {
yield put(action.failure(response.error));
}
}
function* handleRequestSaga() {
yield takeEvery(action.REQUEST, handleRequest)
}
Result of action(payload, dispatch)
is a Promise, so you can directly pass this function to Redux Form's handleSubmit
to perform async validation:
<form onSubmit={handleSubmit(action)}>...</form>
To properly handle form errors you have to pass to action.failure
instance of SubmissionError
:
yield put(action.failure(new SubmissionError(response.error)));
Migration from redux-form-saga
:
This package is 100% compatible with redux-form-saga@0.0.7
, so feel free to use it:
import { PROMISE, createFormAction, formActionSaga } from 'redux-saga-actions';
import { PROMISE_ACTION, createAction, actionsWatcherSaga } from 'redux-saga-actions';
Scripts
$ npm run test
License
MIT