HTML Diff
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