Есть ли способ ничего не передавать дочернему методу?

Ошибка: TypeError: _this.props.handleChangeEvent не является функцией

У меня есть компонент React с методом prop, который используется в другом компоненте представления.

Проблема в том, что другие мои компоненты представления должны использовать мой дочерний компонент, но это вызывает ошибку, потому что требуется использовать метод prop.

class NeedsPropMethod extends Component {
 handleChangeEvent = value => {
  // receives the value
 }

 return (
  <Child toy = "car" color = "blue" handleChangeEvent = {this.handleChangeEvent}>
 )
}

class DoesntNeedPropMethod extends Component {
 return (
  <Child toy = "car" color = "blue"}>
 )
}

class Child extends Component {
 return (
  this.props.toy; // "car"
  this.props.color; // "blue"
  this.props.handleChangeEvent(value) // I do not need this but it gives me the error above
 );
}

вы не передаете его, если он вам не нужен, удалите его.

Junius L. 30.05.2019 11:39

В вашем классе Child выше есть синтаксическая ошибка. Как должен выглядеть В самом деле?

T.J. Crowder 30.05.2019 11:40

вы можете добавить логическую проверку, если она верна, верните handlechange, иначе не запускайте ее

Se0ng11 30.05.2019 11:41

Я бы хотел, но метод prop используется в моем другом компоненте представления, поэтому я пытаюсь найти способ сделать его многоразовым или что-то в этом роде. Добавлю больше кода в мой пример.

Aeriel 30.05.2019 11:44
Поведение ключевого слова "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) для оценки ваших знаний,...
1
4
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете добавить propTypes в свой код, чтобы сделать его необязательным.

Child.propTypes = {
  handleChangeEvent: PropTypes.func
};

поэтому ваш handleChangeEvent будет необязательным

да. Я считаю, что это путь к этому. У меня все еще есть ошибка «TypeError: _this.props.handleChangeEvent не является функцией».

Aeriel 30.05.2019 11:54

Используете ли вы propTypes где-нибудь?

Tony Ngo 30.05.2019 11:56

Только для дочернего компонента

Aeriel 30.05.2019 11:58

Покажите мне полный код вашего ChildComponent, который имеет propTypes

Tony Ngo 30.05.2019 12:00

Мне просто нужно добавить оператор if, если метод prop существует

Aeriel 30.05.2019 12:08

вам нужен реквизит по умолчанию, Child.defaultProp = { handleChangeEvent: () => {} };

Junius L. 30.05.2019 12:10

Из ответа Тони Нго

Child.propTypes = {
  handleChangeEvent: PropTypes.func
};

тогда вам просто нужно проверить, используется ли метод prop

if (this.props.handleChangeEvent) {
 // do stuff here
}

вы можете добавить реквизит по умолчанию и не обязательно это делать

Junius L. 30.05.2019 12:12

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