Куча ошибок это плохо)
Я использую тулкит и дроблю все вызовы на отдельные дерриктории которые называю модели. Модель состоит из api, thunk, slice и selector. В стейте редьюсера закладываю поле для данных и поле так скажем для служебной инфы по запросу в котором есть его состояние и там же error. И локально в компоненте в котором делаю вызов - там же и рисую ошибку полученную селектором.
А если нужна возможность единого флоу для ошибок, то в приложении сделал отдельный пейдж для ошибок и она слушает редьюсер, в который эти ошибки попадают. Далее там где ты запрос делаешь, при неудачи там же шмаляешь его в этот редьюсер и у тебя во весь экран ошибка. А если юзаешь роутеры то можно без редьюсера вообще. в апи редиректишь на ерорр Пейдж и пропсами строки адресной передаешь ошибку.
Вариантов много все делают по разному. Но я такие вот реализации видел.
А так вот сейчас тесщу еще rtk query. Чтобы руками не городить весь тот расписанный велосипед.
Но единый флоу с ошибками я решаю воо так как написал