Write independent small reducer function that are each responsible for updates to a specific slice of state. We call this pattern "reducer composition". A given action could be handled by all, some or non of the reducer functions. A particular reducer function runs in accordance with the action type specified by the action dispatched.

Action: Thanks React!, I will dispatch an action so reducers that care can update state

Store: Ah, thanks action. I see you passed me the current state and the action to perform. I'll make a new copy of the state and return it.

React-Redux: Wow, thanks for the new date Store. I will now intelligently determine if I should tell React about this change so that it only has to bother with updating the UI when necessary.

React: I got the new data that has been passed down via props from the store. I'll update the UI to reflect this!

Why we are using Redux Thunk?

Redux Thunk is a middleware allows you to write action creators that return a function instead of an action. The thunk can be used to delay the dispatch of an action, or to dispatch only if a certain condition is met. We can utilize action creators to achieve tasks like calling APIs, calling promises and only dispatching once we have received the response from the called entity.