Usage with redux-saga
redux-saga
?
How to use it with Many people use redux-saga
to handle application side-effects. The good news is
that this library is totally compatible with it. Just use redux-saga
normally,
see several examples below to get some ideas.
Dispatching request actions
You can dispatch request actions from sagas like any other action. So, for example:
import { put } from 'redux-saga/effects';
function* fetchBookSaga() { yield put(fetchBooks());}
What to do if you need to read a response in saga? Request action dispatches return
promises, so you can use putResolve
instead:
import { putResolve } from 'redux-saga/effects';
function* fetchBookSaga() { const { data, error, isAborted, action } = yield putResolve(fetchBooks());}
Reading requests state
Just use select
effect and getQuerySelector
or getMutationSelector
, for example:
import { select } from 'redux-saga/effects';import { getQuerySelector } from '@redux-requests/core';
function* booksQuerySaga() { const booksQueryState = yield select( getQuerySelector({ type: 'FETCH_BOOKS' }), );}
Reacting to request and response actions
Request action is just a Redux action, so you can listen with take
as usually:
import { take } from 'redux-saga/effects';
function* onFetchBookRequest() { yield take('FETCH_BOOKS'); // do sth}
For response actions it is the same, but you also can use response helpers:
import { take } from 'redux-saga/effects';import { success, error, abort } from '@redux-requests/core';
function* onFetchBookSuccess() { yield take(success('FETCH_BOOKS')); // do sth}
function* onFetchBookError() { yield take(error('FETCH_BOOKS')); // do sth}
function* onFetchBookAbort() { yield take(abort('FETCH_BOOKS')); // do sth}