Je veux faire en sorte que lorsque je clique sur le div, il se déconnecte "asdf" dans la console, mais je ne sais pas si c'est ainsi que fonctionnent les méthodes passées comme accessoires ...
export class App extends Component {
render() {
func = (param) => {
console.log(param);
}
return (
<Card function={this.func} />
)
}
}
export class Card extends Component {
render() {
return(
<div onClick={this.props.function("asdf")}> this is a div </div>
)
}
}
3 Réponses :
Votre idée est bonne, mais il y a deux problèmes avec cette implémentation particulière:
function est un mot-clé en JavaScript, ne l'utilisez donc pas comme identifiant. onClick = {foo (bar)} signifie "appeler foo (bar) au moment du rendu, puis faire du résultat de cet appel le gestionnaire de clics. Vous êtes probablement want onClick = {() => foo (bar)} , ce qui signifie "appeler foo (bar) lorsque l'utilisateur clique sur l'élément". Conseil similaire à Joseph, mais notez également que vous souhaitez extraire votre fonction de la méthode render () . Voici à quoi cela ressemblerait:
export class App extends Component {
printParam = param => {
console.log(param);
};
render() {
return <Card printParam={this.printParam} />;
}
}
export class Card extends Component {
render() {
return (
<button
onClick={() => {
this.props.printParam('asdf');
}}>
Click Me
</button>
);
}
}
func ) dans la portée de la classe et supprimez-la de render () . La raison pour laquelle je le dis pour supprimer de la méthode render () est lorsque l'appel this.func fait référence à this pointe vers les propriétés et méthodes de la classe . Comme il n'y aura pas de propriété ou de méthode func définie dans la portée globale de la classe, elle renverra undefined function car la fonction pourrait indiquer le mot-clé de la fonction native comme en javascript comme Joseph l'a dit dans sa réponse Votre code pourrait être mis à jour de cette manière:
export class App extends Component {
func = param => {
console.log(param);
};
render() {
return <Card myFunction={this.func} />;
}
}
export class Card extends Component {
render() {
return (
<div onClick={() => this.props.myFunction('asdf')}>
{' '}
this is a div{' '}
</div>
);
}
}
Mon plaisir de vous fournir une assistance
C'est bien, je n'utiliserais pas le mot
functioncar il est réservé. Notez également que la façon dont vous le faites icithisà l'intérieur de func peut ne pas être ce que vous attendez.Comme @MattWay l'a dit, vous voudrez peut-être retirer
funcde la méthoderender ()et le définir comme une fonction surApp.