Вот вам максимально наглядный пример почему не нужно использовать реактовский контекст для часто обновляемого стейта: https://codesandbox.io/s/clever-fire-dqc0my



Под капотом, при обновлении значения в провайдере реакт проходится по всем дочерним виртуальным нодам в поисках подписчиков - только если подписчик найден будет ререндер, но, повторюсь, сначала нужно его найти а для этого обойти весь нижележащий VDOM. И эта работа может занимать ОЧЕНЬ много времени на большом количестве виртуальных нод, в примере компонент списка слишком простой и стейтлес, так же я провожу эксперимент на apple m1. У пользователя реального приложения цифры могут быть значительно хуже.