J'ai deux composants. Je veux appeler une méthode du premier composant du deuxième composant. Comment puis-je le faire?
Voici mon code.
première composante
class Header extends React.Component{
constructor(){
super();
}
checkClick(e, notyId){
alert(notyId);
}
}
export default Header;
Deuxième composante
class PopupOver extends React.Component{
constructor(){
super();
// here i need to call Header class function check click....
// How to call Header.checkClick() from this class
}
render(){
return (
<div className="displayinline col-md-12 ">
Hello
</div>
);
}
}
export default PopupOver;
Vous pouvez faire quelque chose comme ça
import React from 'react';
class Header extends React.Component {
constructor() {
super();
}
checkClick(e, notyId) {
alert(notyId);
}
render() {
return (
<PopupOver func ={this.checkClick } />
)
}
};
class PopupOver extends React.Component {
constructor(props) {
super(props);
this.props.func(this, 1234);
}
render() {
return (
<div className="displayinline col-md-12 ">
Hello
</div>
);
}
}
export default Header;
Utilisation de la statique
var MyComponent = React.createClass({
statics: {
customMethod: function(foo) {
return foo === 'bar';
}
},
render: function() {
}
});
MyComponent.customMethod('bar'); // true
Eh bien, en fait, React ne convient pas à l'appel de méthodes enfant à partir du parent. Certains frameworks, tels que Cycle.js , permettent d'accéder facilement aux données des parents et des enfants, et y réagir.
En outre, il y a de fortes chances que vous n'en ayez pas vraiment besoin. Pensez à l'appeler dans un composant existant, c'est une solution beaucoup plus indépendante. Mais parfois, vous en avez toujours besoin et vous avez alors peu de choix:
[~ # ~] upd [~ # ~] : si vous avez besoin de partager des fonctionnalités qui n'impliquent aucun état (comme les fonctions statiques dans OOP ), il n’est pas nécessaire de le contenir à l’intérieur des composants. Il suffit de le déclarer séparément et d'invoquer quand il le faut:
let counter = 0;
function handleInstantiate() {
counter++;
}
constructor(props) {
super(props);
handleInstantiate();
}