React Redux Immutable bindings with 0 dependency
Are you using Immutable.js with Redux selectors (reselect or re-reselect)? Take a look at functional-immutable for a null-safe & consistent point-free implementation of your selectors.
React Redux Immutable relies on peer dependencies, it requires React 0.14 or later, Redux 2 or later, React Redux 5 or later and Immutable 3 already installed.
npm install --save react-redux-immutable
Thanks to default parameters, React Redux Immutable provides a drop-in replacement of React Redux connect function.
Replace
import { connect } from 'react-redux';
//...
export default connect(
mapStateToProps, // Returned Immutable props will be left unchanged
{
/* actions */
},
)(myReactComponent); // This component might receive Immutable propswith
import { connect } from 'react-redux-immutable';
//...
export default connect(
mapStateToProps, // Returned Immutable props will be transformed
{
/* actions */
},
)(myReactComponent); // This component will receive JavaScript propsor with optional filter list
import { connect } from 'react-redux-immutable';
//...
export default connect(
mapStateToProps, // Returned Immutable props will be transformed
{
/* actions */
},
)(myReactComponent, ['myPropKey']); // This component will receive JavaScript propsIf you want more control over your connect logic, you can use toJS function, as seen on Redux documentation
In addition to your usual connect implementation
import { connect } from 'react-redux';
//...
export default connect(
mapStateToProps, // Returned Immutable props will be left unchanged
{
/* actions */
},
)(myReactComponent); // This component might receive Immutable propsadd the following
import { connect } from 'react-redux';
import { toJS } from 'react-redux-immutable';
//...
export default connect(
mapStateToProps, // Returned Immutable props will be transformed
{
/* actions */
},
)(toJS(myReactComponent)); // The wrapped component will receive JavaScript propsand with optional filter list
import { connect } from 'react-redux';
import { toJS } from 'react-redux-immutable';
//...
export default connect(
mapStateToProps, // Returned Immutable props will be transformed
{
/* actions */
},
)(toJS(myReactComponent, ['myPropKey'])); // The wrapped component will receive JavaScript propsThe toJS and connect functions can be imported directly from react-redux-immutable/to-js and react-redux-immutable/connect respectively.
The implementation of this module is coming from Redux documentation example of Higher Order Component used to convert Immutable.JS props into JavaScript props based on cpsubrian gist.