Это разные инструменты для решения разных задач. Хуки работают внутри функционального компонента с состоянием и жизненным циклом. Redux внутренне работает с состоянием и жизненным циклом всего реагирующего приложения. Саги помогают справиться с асинхронными эффектами, такими как выборка внешних данных.
Вообще говоря, вы хотите максимально ограничить область переменных и logi c. Если специфицированная c часть «состояния» является только релевантной для одного компонента, то оставьте ее в состоянии компонента. Но если он нужен нескольким компонентам или самому приложению, то сохраните его в состоянии приложения. То же самое относится к асинхронным вызовам. Если один внешний вызов используется только одним компонентом, оставьте его там, но если несколько компонентов могут выполнять одни и те же внешние асинхронные вызовы c, тогда пусть саги обрабатывают их.
Вы можете использовать как столько или меньше, сколько необходимо в каждом компоненте для решения вашей проблемы.