Вот например взять тот же самый Apollo, там есть хуки useQuery, useMutation и тд.
И ты уже в своем компоненте пользуешься этим хуком. Это хорошо? Если это маленькое приложение, то ок.
Если это что то побольше то уже не ок. Потому что в один момент, может быть принято решение перейти на REST, grpc или еще что то модное. И тут появится проблема, что придется бегать по каждому компоненту и менять useMutation на юзМодернТехнолоджиПост.
Ив этом проблема. Потом учто приложение должно быть разделено на слои. И Такая логика должна хранится не в слое UI и не в слое приложения (СтейтМенеджмента) а слое репозитория. И в таком случае любые изменения технологий и сервисов пройдут безболезннно.
С другой стороны, ты можешь подойти к разработке большого приложения со стороны проектирования всех слоев, построения луковичной архитектуры, придумать как использовать кучу паттернов, описать доку по выбранной архитектуре и начать писать фичи. На второй фиче приходит заказчик и говорит «а чем ты занимался три месяца? собирай вещи»