React TypeError: невозможно прочитать свойство bind из undefined

        <div className = "questions" id = "questions">
          {Array(this.state.numQuestions).fill().map((number, questionIdx) => {
            return (
              <div> 
                <label>Question</label>
              <input type = "text" onChange = {this.handleQuestionChange.bind(questionIdx)}  />
              </div>);
          Array(4).fill().map((number, index) => {
          return <input type = "text" key = {index} onChange = {this.handleAnswerChange.bind(questionIdx)}  />
          })}
          )
          })}
        </div>

Я получаю странную ошибку для строки <input type = "text" onChange = {this.handleQuestionChange.bind(questionIdx)} />

Я не совсем уверен, что означает ошибка, не говоря уже о том, как ее исправить, вот информация об ошибке:

TypeError: Cannot read property 'bind' of undefined

Спасибо!

У вас есть метод handleQuestionChange() в вашем классе компонентов?

Tholle 05.07.2018 17:13

Я просто случайно ошибся, теперь все хорошо, в любом случае спасибо!

dorkycam 05.07.2018 17:18

Чтобы использовать bind, первым параметром должен быть this, но эта ошибка означает, что функция не определена. должно быть как this.handleQuestionChange.bind(this, questionIdx)

Shrroy 05.07.2018 17:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
1 723
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это означает, что this.handleQuestionChange не определен, поэтому вы не можете вызывать bind() (или что-то еще) на нем.

Проверьте свой объект / функции и убедитесь, что он существует.

ой хорошо, сделаю!

dorkycam 05.07.2018 17:13

Лол, у меня функция написана неправильно. Теперь все хорошо, спасибо!

dorkycam 05.07.2018 17:17

Я предпочитаю стрелочную функцию, она более элегантная. Просто определите это как:

const handleAnswerChange = (index) => {
  // do anything you like
  console.info(index)
  }

Тогда вам не нужно связывать свою функцию. Это уже сработало.

Другие вопросы по теме