You can dispatch an action inside your component, for example, when a button is clicked, like
render(){ return ( <div> ... <div> <button onClick={ e => this.context.store.dispatch({type: 'counterChange', amount: 1}) }> + </button> <button onClick={ e => this.context.store.dispatch({type: 'counterChange', amount: -1}) }> - </button> </div> </div> ); }
But a more preferred way is to extract the action creation logic as another function.
function counterChangeAction(amount){ return { type: 'counterChange', amount: amount } } class CounterComponent extends Component { constructor(props){ super(props); } render(){ return ( <div> <h2>Counter</h2> <h3>{this.context.store.getState().counter.value}</h3> <div> <button onClick={ e => this.context.store.dispatch(counterChangeAction(1)) }> + </button> <button onClick={ e => this.context.store.dispatch(counterChangeAction(-1)) }> - </button> </div> </div> ); } }
You will get documenting benefits if you put all the actions together, just like you get the benefits when you put all the sql together in IBatis