J'utilise Reactstrap dans mon projet d'intégration Bootstrap. Cependant, j'ai également besoin d'étendre le comportement onClick
du composant Button
qui sort de la boîte avec Reactstrap. À cette fin, j'ai fait un composant personnalisé NanoButton
qui recompose le composant par défaut. Voici comment je l'appeler:"Impossible de lire la propriété 'onClick' de undefined" dans le composant React
<NanoButton type="button" onClick={() => Router.push('/about')}>About</NanoButton>
Le composant NanoButton
, comme je l'ai dit, ajoute ma fonctionnalité personnalisée onClick
à la classe Button
existante:
import { Component } from 'react';
import { Button } from 'reactstrap';
class NanoButton extends Component {
constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
}
onClick(e) {
var circle = document.createElement('div');
e.target.appendChild(circle);
var d = Math.max(e.target.clientWidth, e.target.clientHeight);
circle.style.width = circle.style.height = d + 'px';
var rect = e.target.getBoundingClientRect();
circle.style.left = e.clientX - rect.left -d/2 + 'px';
circle.style.top = e.clientY - rect.top - d/2 + 'px';
circle.classList.add('ripple');
this.props.onClick();
}
render() {
return (
<Button
className={this.props.className}
type={this.props.type}
color={this.props.color}
size={this.props.size}
onClick={this.onClick}
>
{this.props.children}
</Button>
);
}
}
export default NanoButton;
Comme vous pouvez le voir, j'ai besoin NanoButton
composant pour effectuer certaines activités personnalisées avant d'exécuter la fonction onClick
qui lui a été transmise en tant que prop. Mais lors du chargement dans le navigateur, il échoue à this.props.onClick();
en disant qu'il ne peut pas lire onClick on undefined
? Que pourrais-je manquer ici?
Voir mon commentaire à la réponse précédente. – TheLearner
Je comprends ce que vous essayez de faire, et cela devrait fonctionner, le problème vient ici de la ligne 'this.props.onClick();' dans la méthode onClick, puisque cette méthode n'est pas liée à la classe, 'this. les accessoires »n'est pas défini. –
Mais si je le lie, seul onClick est passé comme les accessoires s'exécuteront et celui défini dans le composant sera ignoré.Ce n'est pas ce que je cherche. J'ai besoin d'exécuter le onClick défini dans NanoButton ** avant ** d'exécuter le onClick qui lui est passé comme accessoire. – TheLearner