Из реагирующих документов :
Вы должны быть осторожны со значением this
в обратных вызовах JSX.В JavaScript методы класса не связаны по умолчанию.Если вы забудете связать this.handleClick
и передать его в onClick
, this
будет undefined
, когда функция действительно вызывается.
Это не специфичное для React поведение;это часть того, как функции работают в JavaScript.Обычно, если вы ссылаетесь на метод без ()
после него, такой как onClick={this.handleClick}
, вы должны связать этот метод.
Если вы используете babel, вы можете использовать поля public classсинтаксис , который приведет к автоматическому связыванию this
.Обратите внимание, что этот метод все еще не соответствует языковому стандарту и работает только потому, что babel преобразует его в действительный javascript:
searchHandler = event => { /* this is defined here ... */ }
. Способ es5 заключается в связывании функции в constructor
:
class MyComponent extends Component {
constructor(props) {
super(props);
// bind this to your handler
this.searchHandler = this.searchHandler.bind(this);
/* other initialization */
}
searchHander(event) { /* you can access this here... */ }
}
Обратите внимание, что синтаксис функции стрелки имеет некоторые ограничения.Например, вы не можете переопределить его в классах, которые расширяют класс, в котором он был определен. В реакции это не проблема в большинстве случаев, потому что наследование не рекомендуется в пользу композиции.