Проблема, с которой вы можете столкнуться при использовании контекста, заключается в том, что при каждом обновлении провайдера он будет отображаться. И каждый раз, когда компонент выполняет рендеринг своих дочерних элементов, тоже (если они не запомнены).
В описываемом вами случае я могу вспомнить два сценария ios.
Загружаются ли все сообщения одновременно ?
В этом случае у вас будет начальный рендер и еще один после выборки данных. С этого момента данные не изменятся, и провайдер не будет запускать новые рендеры.
Обновляются ли сообщения / добавляются несколько раз?
В этом случае каждый раз, когда провайдер обновляет все свои дочерние элементы, визуализации. Это может быть проблемой, если есть много дочерних элементов, и они не запомнены.
Если ваш случай - первый, я бы проверил, есть ли какая-либо проблема, связанная с управлением данными в контексте.
В во втором случае вы можете рассмотреть другие варианты, такие как использование Redux вместо Context или, возможно, одна из предложенных вами библиотек.
В любом из двух случаев, если вы управляете большим количеством информации в один объект, который вы могли бы рассмотреть, используя другой контекст и предоставляя меньшие наборы данных различным частям приложения.