Вы должны использовать флаги состояния в редьюсере и промежуточное ПО воде
redux-thunk.
Посмотрите
пример реализации асинхронного действия и редьюсера.
В итоге ваш компонент:
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { Preloader, Product } from './compnents';
import { fetchProductBySlug } from './actions';
const Example = ({ slug }) => {
const dispatch = useDispatch();
const { product, isFetching } = useSelector(state => ({
product: state.product,
isFetching: state.isFetching,
}));
useEffect(() => {
dispatch(fetchProductBySlug(slug));
}, []);
if (isFetching) return <Preloader />;
return <Product product={product} />;
};
export default Example;
Так же почитайте про селекторы и
reselect. Ну и посмотрите туториалы по redux-thunk.