При работе с React любое изменение в интерфейсе необходимо отражать в state. Если вам необходимо получить данные асинхронно, значит ваш компонент будет иметь минимум 3 состояния: данные при инициализации, ожидание загрузки, данные получены. Также, dispatch всегда синхронный, именно поэтому нам и нужны библиотеки вроде React Thunk, которые выполняют отложенное изменение стейта. Поэтому, писать асинхронные action без вызова dispatch неправильно