Redux-Tool, an unopinionated helper to create your Redux files for you, handling all the boilerplate. Redux apps are great, but often creating just one new user interaction requires touching 8, 9, even 10 or more files. This tool lets you automate that process easily.
Redux-Tool does all the repetitive tasks necessary to create your app,
- Creates all necessary new folders and up-to-date index files for those folders
- Creates new files using customizable boilerplate
- Uses all latest ES6 syntax
- Automatically creates utilities as required
npm install -g redux-tool
This makes the following commands available in the command line,
redux-tool-selector [propertyName]
redux-tool-action [actionName] [argumentName]
redux-tool-reducer [propertyName] [defaultValue=0]
redux-tool-component [componentName]
redux-tool-saga [sagaName] [actionName="ACTION_NAME"]
Executing these commands will create boilerplate Redux code relative to the directory they are executed from.
Please note that you should always quickly commit your progress before using any CLI tool
Redux tool is run from the command line.
It creates necessary files for a React-Redux application and updates the index.
It assumes you are using ES6 with import
statements.
Example:
redux-tool-selector taxAmount
Description: Create a file ./src/selectors/taxAmountSelector.js
and updates the index of the ./src/selectors/
directory.
To change the templates, create a redux-tool-config.js
file and indicate the templates there. See the redux-tool-config.js
of this repository for a full example.
module.exports = {
templates:{
selector:require('./templates/selector'),
},
};
Templates are standard lodash-style templates. E.g,
`export { <%= name %>} } from './<%= name %>';`
Creates a new selector in the selectors folder that selects propertyName
. Also updates the index. The basic generated selector is meant to be modified but sometimes is enough on its own.
redux-tool-selector tax
import { createSelector } from 'reselect'
export const taxSelector = createSelector(
state=>state.tax,
tax=>tax
)
Creates a new directory componentName
in the components folder. Creates display and container React-Redux components and updates the index.
redux-tool-component TaxWidget
import { connect } from 'react-redux'
import {
TaxWidgetDisplay
} from './TaxWidgetDisplay';
[...]
export const TaxWidgetContainer = connect(
mapStateToProps,
mapDispatchToProps
)(TaxWidgetDisplay);
import React from 'react'
export const TaxWidgetDisplay = ({})=>(
<div>
</div>
);
Creates a new action creator and constant based on actionName
. The action and the constant are both exported. A property name can be added to the action with argumentName
(optional).
redux-tool-action changeTax rate
import { makeActionCreator } from '../utility';
export const CHANGE_TAX = "CHANGE_TAX";
export const changeTax = makeActionCreator(CHANGE_TAX,"rate");
export { changeTax , CHANGE_TAX } from './changeTax';
Creates a new reducer for the state property propertyName
. A defaultValue
can be defined, or it is automatically set to 0.
redux-tool-reducer taxRate
import { createReducer } from './../utility';
export const taxRate = createReducer(0, {
["ACTION_NAME"](state,action) {
return state;
}
});
Creates a saga called sagaName
, importing an optional action name.
redux-tool-saga updateTaxRates changeLocale
import { takeEvery } from 'redux-saga/effects'
import {
CHANGE_LOCALE,
} from './../actions'
function* updateTaxRates() {
}
export function* updateTaxRatesSaga() {
yield takeEvery(CHANGE_LOCALE, updateTaxRates);
}
All contributions are warmly encouraged! If you already have something to contribute, just go ahead and open a PR. If you're not sure what to contribute, open an issue and let us know you're here to help.