Как this.context работает в React?

Это не официальный API (еще!), но context может быть супер полезен в React mixins. Однако его поведение и содержание для меня не совсем интуитивно понятны.

Откуда взялось содержимое this.context?

(Начиная с этой записи, React находится в версии 0.12)

Ответ 1

Я рассматривал это слишком this.context, this.context - это набор атрибутов, которые неявно передаются его this.context а не передаются свойства явно. Вы можете посмотреть на комплекты тестирования React, чтобы увидеть, как они ведут себя:

https://github.com/facebook/react/blob/0.12-stable/src/core/tests/ReactCompositeComponent-test.js#L1101

https://github.com/facebook/react/blob/0.12-stable/src/core/tests/ReactElement-test.js#L100

Я также нашел эту статью Дейва Кинга полезной для понимания некоторых раскрытых методов и поведения: http://web.archive.org/web/20150319074927/https://www.tildedave.com/2014/11/15/introduction -в-контексты-в-среагировать-js.html

Ответ 2

Если вы не возражаете, у меня есть пост в контексте React https://dlinau.wordpress.com/2015/07/19/take-a-deeper-look-into-context-in-react-js

Короче говоря, контекст - это объект с атрибутами, которые неявно передаются от элемента ко всем его дочерям и внукам.

Чтобы обмениваться данными/атрибутами с дочерними компонентами с контекстом, компонент определяет имена атрибутов и типы данных, доступные в контексте, определяя атрибут childContextTypes. Также необходимо определить метод getChildContext, который возвращает значения данных атрибутов в контексте. Ключи в childContextTypes должны быть точно таким же набором ключей в объекте, возвращаемом методом getChildContext.

Когда дочерний компонент хочет использовать данные из контекста родителей, он должен сначала объявить, что он хочет использовать явно, указав атрибуты contextTypes. contextTypes - это объект, определяющий имя и тип атрибутов, которые он хочет использовать.

Ответ 3

Документы имеют лучшую информацию. http://reactjs.org/docs/context.html

Короче говоря, это то, что контекст.

Top Parent
  |
  |
  |
Inter Parent
  |
  |
  |
Immediate Parent
  |
  |
  |
Child

Скажем, вам нужно передать реквизит от Лучшего Родителя Ребенку. Вы должны будете установить его как опору для Немедленного Родителя и Меж родителя. И если это 2 пути, то реквизиты должны быть переданы в обе стороны.

Контекст позволяет вам обойти это и передавать данные напрямую из Top Parent to Child

Это становится более полезным, когда нескольким детям нужна одна и та же опора, но каждый глубоко вложен