redux-root-saga
Strongly typed and well tested React Hooks to store and retrieve previous values from any component property.
!Build Statusbuild-badgebuild !Code Coveragecoverage-badgecoverage !Versionversion-badgepackage !Downloadsdownloads-badgenpmtrends !MIT Licenselicense-badgelicense !Semantic Releaserelease-badgerelease !Conventional Commitscommits-badgecommits !PRs Welcomeprs-badgeprs !Code of Conductcoc-badgecoc !Discorddiscord-badgediscord !Twittertwitter-badgetwitter
About
Redux Root Saga provides an easy way to quickly run multiple sagas concurrently in a tested and widely used way.This package is originally based on the root saga pattern from the official documentation and therefore an easy way to get the described behavior without copy-pasting it into every new project.
See #-features for an overview of all available options and the extended functionality.
Table of Contents
- 🐛 Bugs - 💡 Feature Requests
⚙️ Installation
Latest stable release
npm install --save redux-root-saga
or
yarn add redux-root-saga
Latest Release Candidate
npm install --save redux-root-saga@next
or
yarn add redux-root-saga@next
⚡️ Getting Started
import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from '@redux-saga/core';
import createRootSaga from 'redux-root-saga';
function* saga1() {
/*...*/
}
function* saga2() {
/*...*/
}
// Option 1: Execute all specified sagas concurrently with default options.
const rootSaga = createRootSaga([saga1, saga2]);
// Option 2: Start all sagas with (partly) customized default options.
const rootSaga = createRootSaga([saga1, saga2], {
maxRetries: 3,
errorHandler: (error, saga, options) => console.err(
`Error in saga ${saga.name} with options ${options}: ${error}`);
});
// Option 3: Start all sagas with (partly) customized default options
// and use specific custom options only for saga1.
// All other options of saga1 fallback to the (customized) default ones.
const rootSaga = createRootSaga([[saga1, { maxRetries: Infinity }], saga2], {
maxRetries: 3,
onError: (error, saga, options) => console.error(
`Error in saga ${saga.name} with options ${options}: ${error}`),
});
const sagaMiddleware = createSagaMiddleware();
const store = createStore(reducer, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(rootSaga);
🎯 Features
- Strictly typed and fully Typescript compatible
- Maximum retry count for restarting child sagas
- Default error handling with a warning message including the saga name
- Custom error handling callback
Other Solutions
I'm not aware of any, if you are please make a pull requestprs and add it here!Issues
Looking to contribute? Look for the Good First Issuegood-first-issue label.🐛 Bugs
Please file an issue for bugs, missing documentation, or unexpected behavior.See Bugsbugs
💡 Feature Requests
Please file an issue to suggest new features. Vote on feature requests by adding a 👍. This helps maintainers prioritize what to work on.See Feature Requestsrequests
Contributors ✨
Thanks goes to these people (emoji keyemojis):This project follows the all-contributorsall-contributors specification. Contributions of any kind welcome!