Когда вы берете что-то из контекста, вы получаете это от ближайшего провайдера вверх дерева компонентов. Поскольку вы вызвали useContext внутри компонента Context
, он будет искать поставщика выше по дереву, чем Context
. Ничего не существует, поэтому вместо этого вы получите значение по умолчанию. Ваш пример с messageContext.Consumer
находится внутри поставщика, поэтому он может видеть это значение.
Нет особых причин использовать значение в том же самом компоненте, в котором вы его предоставляете. Чтобы предоставить значение, у вас, вероятно, есть некоторый logi c, который приводит к локальной переменной, и вы можете повторно использовать эту же локальную переменную для любых других частей компонента, которые в ней нуждаются.