Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
В этом решении показаны два случая: бейдж внутри провайдера (получает value и показывает имя) и бейдж вне провайдера (получает defaultValue из createContext и показывает «Гость»).
Контекст создаётся с аргументом { user: null } — это значение получат все потребители, которые окажутся вне соответствующего провайдера. Так мы задаём осмысленное поведение по умолчанию: «пользователя нет» → показываем «Гость».
Один и тот же компонент: если он внутри провайдера, в контекст приходит value с объектом user — показываем имя и зелёную точку. Если снаружи — приходит defaultValue { user: null } — показываем «Гость» и amber-точку. Логика отображения не меняется, меняется только источник данных.
Провайдер оборачивает только первый блок (шапка и подзаголовок). Второй div с UserBadge — вне провайдера, на одном уровне с закрывающим тегом провайдера. Там тот же UserBadge, но он подписан на контекст без провайдера выше по дереву и получает defaultValue — поэтому во втором блоке отображается «Гость».