Если используешь метод внутри класса - то не нужно.
class Div extends Component {
constructor(props) {
super(props);
this.props=props;
}
showAlert(value) {
alert(value);
}
render() {
this.showAlert(1);
return (
<div>
</div>
);
}
}
Все будет норм.
Но если ты будешь передавать какой-то метод в обработчик или в дочерний компонент, то произойдет следующее:
this -
текущий контекст - класс в котором объявлен.
Далее button (это хоть и простой jsx, но все же компонент) - внутри себя вызывает this.имяМетода - this уже сменился.
Вот пример:
class Div extends Component {
constructor(props) {
super(props);
this.props=props;
}
showEvent(e) {
alert(e);
}
render() {
this.showAlert(1);
return (
<div>
<button onClick={this.showEvent}></button>
</div>
);
}
}
this - определяется в момент
вызова.
Чтобы все было ок, есть следующие пути привязки контекста:
1)
var self = this
- сохранение в переменную.
2)
apply
- вызов метода с явной передачей контекста.
3)
bind(some)
- привязка контекста. Говорит функции что использовать в качестве контекста, потом изменить контекст нельзя.
4)
()=>{}
- стрелочная функция, которая в отличие от
function(){}
- определяет контекст не в момент вызова, а в момент объявления.
Используется фиксированный контекст и метод вызывается используя то что нужно, а не пытается вызваться от другого объекта.