Search code examples
reactjsreduxredux-thunk

React Redux Thunk trigger multiple actions on one call


I have an action which in turn must affect many other areas of my app state. In this case, when the user selects a website from a dropdown list, it must update many other components. I'm currently doing it like so:

setSelectedWebsite (websiteId) {
    // The core reason for this component
    this.props.setSelectedWebsite(websiteId);

    // Fetch all associated accounts
    this.props.fetchAllAccounts(websiteId)

    // Several other "side effect" calls here...
}

In this interest of making one component serve one purpose, this feels like a bad practice.

What is the best practice for triggering multiple actions in one call from a component?


Solution

  • You could use redux-thunk.

    Your component's method:

    setSelectedWebsite(websiteId){
        this.props.handleSetSelectedWebsite(websiteId) // this is a thunk
    }
    

    Your Redux file with action creators / thunks:

    // this function is a thunk
    
    export const handleSetSelectedWebsite = (websiteId) => (dispatch) => {
        dispatch(setSelectedWebsite(websiteId))
        dispatch(fetchAllAccounts(websiteId))
    }
    
    // these function are action creators (or could be other thunks if you style them the same way as the thunk above)
    
    const setSelectedWebsite = (websiteId) => {
        // your code
    }
    
    const fetchAllAccounts = (websiteId) => {
        // your code
    }