Ошибка: 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
);
}
В вашем классе Child
выше есть синтаксическая ошибка. Как должен выглядеть В самом деле?
вы можете добавить логическую проверку, если она верна, верните handlechange
, иначе не запускайте ее
Я бы хотел, но метод prop используется в моем другом компоненте представления, поэтому я пытаюсь найти способ сделать его многоразовым или что-то в этом роде. Добавлю больше кода в мой пример.
Вы можете добавить propTypes в свой код, чтобы сделать его необязательным.
Child.propTypes = {
handleChangeEvent: PropTypes.func
};
поэтому ваш handleChangeEvent будет необязательным
да. Я считаю, что это путь к этому. У меня все еще есть ошибка «TypeError: _this.props.handleChangeEvent не является функцией».
Используете ли вы propTypes где-нибудь?
Только для дочернего компонента
Покажите мне полный код вашего ChildComponent, который имеет propTypes
Мне просто нужно добавить оператор if, если метод prop существует
вам нужен реквизит по умолчанию, Child.defaultProp = { handleChangeEvent: () => {} };
Из ответа Тони Нго
Child.propTypes = {
handleChangeEvent: PropTypes.func
};
тогда вам просто нужно проверить, используется ли метод prop
if (this.props.handleChangeEvent) {
// do stuff here
}
вы можете добавить реквизит по умолчанию и не обязательно это делать
вы не передаете его, если он вам не нужен, удалите его.