Скажу честно, опыт написания классовых компонентов никогда не имел. Всегда писал только на функциональных и хуками пользуюсь активно.
Код функциональных компонент куда проще, меньше и понятнее, имхо. Хуки - очень полезные инструмент. Нужно иметь разделять state. Что-то идёт в redux, что-то хранится непосредственно в state самой компоненты. Также всё зависит от подхода к организации структуры в проекте.
useState, useRef и useEffect - вообще юзаю в каждом проекте, не представляю как без этого трио можно обойтись. Использование остальных уже от задач зависит.
Придется создавать для теста каждого компонента обертку из провайдера?
Да, но давайте не будем о грустном)
Раньше можно было взять компонент, передать props и быть довольным.
А что сейчас мешает?
На демонстрационных примерах все понятно и очевидно - компоненты проще и читабельнее на хуках, но реальные проекты это какое-тоо месиво и фарш
Если грамотная структура проекта, отделена логика, то всё чётко и понятно. Да, обычно, самая большая боль - это структура. Триллион папок с файлами. Но не уже ли на классах в реальных проектах по-другому?