2013-06-25 3 views
5

Я изо всех сил пытаюсь понять, как контекст работает в инфраструктуре Re-JS Facebook.Контекст в действии React JS в Facebook

При передаче спецификации React.createClass определенные методы (особенно обработчики событий), по-видимому, требуют использования React.autoBind для «связывания обратных вызовов с компонентом». Другие методы (особенно render()) не имеют этого требования, но все же с удовольствием ссылаются на «this.props» или «this.state».

Каков контекст «этого», используемый методом render(), если он не является компонентом?

ответ

3

Это потому, что они уже делают autoBind для внутренних методов, таких как render. Фактически, если вы вызываете autoBind и передаете эти методы, вы получите сообщение об ошибке.

Для пользовательских методов изначально идея состоит в том, что вы можете захотеть придерживаться любого контекста, который вы хотите назначить, но это изменяется в 0.4.x (http://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html).

В основном потому, что связанный this в большинстве случаев то, что вы хотите, с этого момента каждый метод в createClass теперь будет autoBind по умолчанию.

0

В любом компоненте структуры (а не просто реагировать), обработчики событий нужно ручное управление в this ссылки, потому что они зарегистрированы в DOM в качестве обратного вызова функции , не метод. В реакции 0,3 вы можете связать ссылку this самостоятельно, или вы можете использовать React.autoBind, что более эффективно. В React 0.4 все обработчики событий привязаны каркасом на пути в DOM, поэтому вам больше не нужно об этом думать.

Таким образом, ссылка this всегда является ссылкой на экземпляр реагирующего компонента.