redux-saga-effects
v1.1.0
Published
Small tool to help import effects from redux-saga package
Downloads
1,660
Readme
redux-saga-effects
Small package to help import effects
from redux-saga package.
Installation
npm i redux-saga-effects
Motivation
You are using:
- Webpack 2 with Tree-Shaking or Rollup (your config is working with
jsnext:main
field) redux-saga
(which is great btw!)
And you have code like this:
import {
call,
} from 'redux-saga/effects';
function* someSaga() {
yield call(anotherFunction, 'param1');
}
All is OK, except for... this is not working well with jsnext:main
.
Details is here.
Much more details can be found in related issue https://github.com/redux-saga/redux-saga/issues/689.
Duplication of redux-saga
adds ~30Kb to your bundle size (unminified, not compressed).
If you are not using Webpack 2 or Rollup or just don't care about your bundle size - all is fine, this package just not for you! 😉
But what to do if you need this to be working well and don't want to type more?.. 🤔
Possible solutions for proper work with jsnext:main
:
1. Destructure effects later
import {
effects, // <---- changed!
} from 'redux-saga';
const { // <---- added!
call, // <---- added!
} = effects; // <---- added!
function* someSaga() {
yield call(anotherFunction, 'param1');
}
In this case destructuring like that should take place in each file - it's OK, but need something better
2. Just use effects without destructuring
import {
effects, // <--- changed
} from 'redux-saga/effects';
function* someSaga() {
yield effects.call(anotherFunction, 'param1'); // <--- changed
}
If you OK with this style - it's good solution. But you need to type more. And read more, actually. But here is another option!
3. Use this package
import {
call,
} from 'redux-saga-effects'; // <--- changed
function* someSaga() {
yield call(anotherFunction, 'param1');
}
Look, just one symbol changed! 🔮
Benefits you get using this package:
- convinient API - all docs is coming from
redux-saga
itself, no additional wrappers, just re-export - easy to migrate with existing codebase
- reduce bundle size for free - package is just 20 lines of code. Compare this with ~30Kb from duplication of
redux-saga
... 🤓
Downsides: install "one more package"