Diluter
An automatic Redux reducer, taking the pain out of Redux.
Install
npm i --save Diluter
Usage
Create a Store
import Diluter from 'Diluter'
const defaultState = {
USER: { name: '', id: 0 },
FRIENDS: []
}
const store = Diluter(defaultStore)
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>
, document.getElementById('root'))
Connect a Component
import { Connector } from 'Diluter'
class App extends Component {
render() {
return (
<div>
Hello {this.props.USER.name}!
You have {this.props.FRIENDS.length} friends.
</div>
)
}
}
export default Connector(App, ['USER', 'FRIENDS'], [])
Dispatching an Action
const setUserName = name => dispatch => {
dispatch({
type: 'USER',
name
})
}
class SetName extends Component {
render() {
return (
<div>
Please choose a new name.
<input
placeholder={'John Doe'}
value={this.props.USER.name}
onChange={e => this.props.setUserName(e.target.value)}
/>
</div>
)
}
}
export default Connector(SetName, ['USER'], [setUserName])
Action with Custom Reducer
const addFriend = friend => dispatch => {
dispatch({
type: 'FRIENDS',
reducer: (state) => {
return [...state, friend]
}
})
}
Hook into the Reducer
const hook = (newState, action) => {
return { ...newState, lastAction: action }
}
const store = Diluter(defaultState, hook)