createContext¶
createContext
позволяет вам создать контекст, который компоненты могут предоставить или прочитать.
1 |
|
Описание¶
createContext(defaultValue)
¶
Вызовите createContext
вне каких-либо компонентов для создания контекста.
1 2 3 |
|
Параметры¶
defaultValue
: Значение, которое вы хотите, чтобы контекст имел, если в дереве над компонентом, читающим контекст, нет подходящего поставщика контекста. Если у вас нет никакого значимого значения по умолчанию, укажитеnull
. Значение по умолчанию используется в качестве запасного варианта "на крайний случай". Оно статично и никогда не изменяется с течением времени.
Возвращает¶
createContext
возвращает объект контекста.
Сам объект контекста не содержит никакой информации. Он представляет какой контекст читают или предоставляют другие компоненты. Обычно вы используете SomeContext.Provider
в компонентах выше, чтобы указать значение контекста, и вызываете useContext(SomeContext)
в компонентах ниже, чтобы прочитать его. Объект контекста имеет несколько свойств:
SomeContext.Provider
позволяет вам предоставлять значение контекста компонентам.SomeContext.Consumer
является альтернативным и редко используемым способом чтения значения контекста.
SomeContext.Provider
¶
Оберните ваши компоненты в провайдер контекста, чтобы указать значение этого контекста для всех компонентов внутри:
1 2 3 4 5 6 7 8 9 |
|
Параметры¶
value
: Значение, которое вы хотите передать всем компонентам, читающим данный контекст внутри данного провайдера, независимо от его глубины. Значение контекста может быть любого типа. Компонент, вызывающийuseContext(SomeContext)
внутри провайдера, получаетvalue
самого внутреннего соответствующего провайдера контекста над ним.
SomeContext.Consumer
¶
До появления useContext
существовал более старый способ чтения контекста:
1 2 3 4 5 6 7 8 |
|
Хотя этот старый способ все еще работает, но новый написанный код должен читать контекст с помощью useContext()
вместо этого:
1 2 3 4 5 |
|
Параметры¶
children
: Функция. React будет вызывать переданную вами функцию с текущим значением контекста, определяемым по тому же алгоритму, что иuseContext()
, и отображать результат, возвращаемый этой функцией. React также будет повторно запускать эту функцию и обновлять пользовательский интерфейс при каждом изменении контекста из родительских компонентов.
Использование¶
Создание контекста¶
Контекст позволяет компонентам передавать информацию вглубь без явной передачи пропсов.
Вызовите createContext
вне любых компонентов для создания одного или нескольких контекстов.
1 2 3 4 |
|
createContext
возвращает объект контекста. Компоненты могут читать контекст, передавая его в useContext()
:
1 2 3 4 5 6 7 8 9 |
|
По умолчанию, значения, которые они получают, будут значениями по умолчанию, которые вы указали при создании контекстов. Однако, само по себе это не полезно, потому что значения по умолчанию никогда не меняются.
Контекст полезен, потому что вы можете предоставить другие, динамические значения из ваших компонентов:.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Теперь компонент Page
и все компоненты внутри него, независимо от глубины, будут "видеть" переданные значения контекста. Если переданные значения контекста изменяются, React будет перерисовывать компоненты, читающие контекст.
Подробнее о чтении и предоставлении контекста и примеры
Импорт и экспорт контекста из файла¶
Часто компонентам в разных файлах требуется доступ к одному и тому же контексту. Поэтому обычно контексты объявляются в отдельном файле. Затем вы можете использовать оператор export
, чтобы сделать контекст доступным для других файлов:
1 2 3 4 5 |
|
Компоненты, объявленные в других файлах, могут использовать оператор импорт
для чтения или предоставления этого контекста:
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Это работает аналогично импорту и экспорту компонентов.
Устранение неполадок¶
Я не могу найти способ изменить значение контекста¶
Код, подобный этому, определяет значение контекста по умолчанию:
1 |
|
Это значение никогда не меняется. React использует это значение только в качестве запасного варианта, если не может найти подходящего провайдера выше.
Чтобы контекст менялся со временем, добавьте состояние и оберните компоненты в провайдера контекста.
Источник — https://react.dev/reference/react/createContext