Любая функция, вызываемая напрямую из метода рендеринга, получит объект контейнера как this
Но когда мы назначаем функцию событию onClick
, мы не хотим немедленно вызывать эту функцию ...поэтому мы присваиваем его так:
<button onClick={this.handleIncrement}>
(только имя функции без ()
в конце) ... и это говорит о вызове функции при нажатии кнопки.
Но когда вы нажимаете кнопку, функция больше не будет вызываться из метода render
, поэтому ссылка this
будет изменена и приведет к ошибке.
В вашем случае вы добавили ()
кваша this.handleIncrement
функция вызывает ее немедленно ... так что она не вызывает никаких проблем, но она даст вам неправильные результаты почти во всех случаях, так как она не будет вызываться на click
, но будет вызываться с каждым рендером.
Поскольку ваш простой код отображается только при нажатии кнопки, это, вероятно, решает проблему. Добавьте вторую кнопку , и она даст неправильный результат, или пользовательский интерфейс замерзнет.
Правильный способ - удалить ()
после this.handleIncreament
и связать функцию внутри конструктор ... this.handleIncreament = this.handleIncreament.bind(this)