В первую очередь нам необходимо вспомнить, что React - это всего лишь шаблонизатор, но при этом очень удобный и умный. Это не фреймворк, поэтому у него нет готовой архитектуры, отсустствуют модели, контроллеры, нет REST клиента, это просто слой View - представление. Отсюда и вытекают некоторые сложности, которые мы рассмотрим ниже.
Зачастую бывает так, что в вашем React приложение имеется огромная иерархия компонентов, и эти компоненты помимо получения свойств от родителей и их отображения, могут взаимодействовать между собой, например SomeComponent3 может взаимодействовать с AnotherComponent3.
Предположим еще, что мы хотим, чтобы SomeComponent4 и AnotherComponent4 всегда получали одни и теже данные - importantInfo, нам нужно хранить общую информацию в их общем родителе - App и нужно ее передавать через ВСЕ промежуточные компоненты. Это довольно сложно, так как дерево компонентов может быть очень и очень большим.

