Это зависит от того, где находятся места, где вы хотите поделиться ими, я имею в виду, если вы хотите поделиться данными в одной и той же ветви дерева компонентов, у вас может быть Контейнерный компонент вверху (который содержит ваш штат и данные передаются с реквизитами на следующие уровни).
Если ваша ветвь компонентов очень сложная и ей нужно пройти по многим уровням , то это неприятно и не рекомендуется, в этом случае рассмотрите возможность использования Context API
https://reactjs.org/docs/context.html
Я бы не рекомендовал HOC для этого, HOC не предназначен для обмена данными, он предназначен для совместного использования многократно используемых функций .
Пожалуйста, отметьте это, здесь есть несколько лучших практик https://www.toptal.com/react/tips-and-practices
Ну REDUX - это еще один способ, но я бы не рекомендовал использовать REDUX, глядя на ваши потребности.
Когда использовать REDUX?
По сути, вам нужно использовать REDUX, когда сохранение состояния в корневом компоненте верхнего уровня более не достаточно, как, например: (у вас есть две ветви из корневого компонента, один из дочерних компонентов в ветви A хочет получить доступ к некоторому состоянию в дочернем элементе B , затем вам нужно переместить его в корневой компонент и снова передать его, такие случаи подходят для REDUX ).