0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p><a>Контекст в React</a>- это глобальное состояние для компонентов. API React-контекста позволяет создавать глобальные объекты компонентов, которые станут в итоге доступны любому компоненту. Как результат - возможность обмена данными без необходимости передачи свойств по всему дереву DOM.</p>
1
<p><a>Контекст в React</a>- это глобальное состояние для компонентов. API React-контекста позволяет создавать глобальные объекты компонентов, которые станут в итоге доступны любому компоненту. Как результат - возможность обмена данными без необходимости передачи свойств по всему дереву DOM.</p>
2
<h2>Применение контекста</h2>
2
<h2>Применение контекста</h2>
3
<p>В первую очередь, следует создать объект контекста:</p>
3
<p>В первую очередь, следует создать объект контекста:</p>
4
<p>Если посмотреть React-документацию, то мы увидим, что установка контекста в компоненте выглядит следующим образом:</p>
4
<p>Если посмотреть React-документацию, то мы увидим, что установка контекста в компоненте выглядит следующим образом:</p>
5
<p>Но, к сожалению, в CodePen (React 16.4.2) это не сработало. Однако можно воспользоваться компонентами высшего порядка (КВП), что позволит задействовать контекст так, как<a>рекомендует</a>Dan Abramov:</p>
5
<p>Но, к сожалению, в CodePen (React 16.4.2) это не сработало. Однако можно воспользоваться компонентами высшего порядка (КВП), что позволит задействовать контекст так, как<a>рекомендует</a>Dan Abramov:</p>
6
<p>Тут мы оборачиваем компонент в компонент Context.Consumer, передавая в контекст в виде свойства.</p>
6
<p>Тут мы оборачиваем компонент в компонент Context.Consumer, передавая в контекст в виде свойства.</p>
7
<p>Что же, далее можно написать следующее:</p>
7
<p>Что же, далее можно написать следующее:</p>
8
<p>При этом мы получим доступ к foo из объекта контекста в свойствах.</p>
8
<p>При этом мы получим доступ к foo из объекта контекста в свойствах.</p>
9
<p>Но как же поменять контекст? Это уже сложнее, но у нас есть возможность ещё раз задействовать компоненты высшего порядка, получив что-то вроде:</p>
9
<p>Но как же поменять контекст? Это уже сложнее, но у нас есть возможность ещё раз задействовать компоненты высшего порядка, получив что-то вроде:</p>
10
<p>В первую очередь мы возьмем исходное состояние контекста - это объект, который передан в React.createContext(). Его можно задействовать в качестве состояния компонента-обёртки. Далее определим все методы, которые пригодятся для смены состояния. В конце концов, обернем компонент в компонент Context.Provider. То есть мы осуществляем передачу состояния и функции в свойство value. Следовательно, они появятся в контексте у всех наследников, которые обернуты в компонент Context.Consumer.</p>
10
<p>В первую очередь мы возьмем исходное состояние контекста - это объект, который передан в React.createContext(). Его можно задействовать в качестве состояния компонента-обёртки. Далее определим все методы, которые пригодятся для смены состояния. В конце концов, обернем компонент в компонент Context.Provider. То есть мы осуществляем передачу состояния и функции в свойство value. Следовательно, они появятся в контексте у всех наследников, которые обернуты в компонент Context.Consumer.</p>
11
<p>Далее соберем всё воедино (компоненты высшего порядка для краткости опустим):</p>
11
<p>Далее соберем всё воедино (компоненты высшего порядка для краткости опустим):</p>
12
<p>В результате дочерний компонент получает доступ к глобальному контексту, и у него есть возможность менять значение атрибута foo на baz.</p>
12
<p>В результате дочерний компонент получает доступ к глобальному контексту, и у него есть возможность менять значение атрибута foo на baz.</p>
13
<p>Весь код по теме контекста смотрите<a>здесь</a>.</p>
13
<p>Весь код по теме контекста смотрите<a>здесь</a>.</p>
14
<p><em><a>Первоисточник</a></em></p>
14
<p><em><a>Первоисточник</a></em></p>
15
15