В сообщении об ошибке говорится, что объект this
не содержит свойства с именем state
. Что именно означает this
, так это постоянный источник путаницы в JS, за исключением случаев, когда внутри функции стрелки. Внутри функции стрелки this
всегда ссылается на контекст, в котором появляется функция стрелки.
Проблема здесь в первом примере, this
относится к контексту, отправляемому обработчику событием onClick. Этот контекст не содержит свойства state
. Однако внутри функции стрелки ключевое слово this
будет ссылаться на класс JavaScript, в котором существует ваша функция стрелки. Этот класс имеет свойство state
.
Кому чтобы обойти это, вы можете использовать bind
(который выводит копию вашей функции с контекстом, установленным для того, что вы предоставляете ей. Или просто использовать функции стрелок. Если бы это был я, я бы выбрал последний подход, поскольку лучше определенное и более согласованное поведение внутри функции стрелки. Если вы хотите использовать bind
, вы должны сделать это в объявлении обработчика событий следующим образом:
onClick={this.toggleHandler.bind(this)}