Je souhaite faire une page avec une barre d'outils en haut qui détermine quelle page le corps affiche. J'ai défini une variable appelée "pageactive" qui est détenue dans l'état de la classe d'application.
Le parent est-ce. P> et l'enfant est-ce. P> class LeagueToolbar extends Component {
constructor(props) {
super(props);
this.state = {
menuPosition: null,
};
}
handleClick = (event) => {
this.setState({ menuPosition: event.currentTarget });
}
handleClose = () => {
this.props.changePageActive(2); // does not work
this.setState({ menuPosition: null });
}
render() {
return (
<div >
<AppBar position="static">
<Toolbar>
<IconButton edge="start" color="inherit" aria-label="Menu"
onClick={this.handleClick} >
<MenuIcon />
</IconButton>
<Menu
id="simple-menu"
anchorEl={this.state.menuPosition}
anchorOrigin={{ vertical: "bottom", horizontal: "left" }}
getContentAnchorEl={null}
keepMounted
open={Boolean(this.state.menuPosition)}
onClose={this.handleClose}
>
<MenuItem onClick={this.handleClose}>League Summary</MenuItem>
<MenuItem onClick={this.handleClose}>History</MenuItem>
<MenuItem onClick={this.handleClose}>Admin</MenuItem>
</Menu>
<Typography variant="h6" >
{(function(){
switch(this.props.pageActive) { // does not work
case 1:
return <div>option1</div>;
case 2:
return <div>option2</div>;
}
})}
</Typography>
</Toolbar>
</AppBar>
</div>
);
}
}
export default LeagueToolbar;
3 Réponses :
erreur passe fonctionne-définition de fonction dans JSX de Leaetoolbar code>, c'est la solution:
Donc, il n'est pas possible de passer une variable? Passez-vous la fonction GET?
Le bug principal est ici: vous déclarez fonction anonyme et n'oubliez pas de passer Changepageactive à LeaToolBar P> (fonction () {.....}) code> Mais vous n'avez pas appelé. Ajoutez simplement des crochets ronds et en plus à la fin - (fonction () {.....} ()) code> ou comme @ avinash-mahlawat proposé - déplacez ce code dans une méthode de classe distincte. Cela vous fera que le code est plus lisible. P> <LeagueToolbar pageActive={this.state.pageActive} changePageActive={this.changePageActive}/>
première passe et vous devez également appeler la fonction anonyme Ie à l'aide de l'instruction de commutation dans Utilisez également la fonction de flèche pour lier I.e. P> changepageactive = {this.changepageactive} code> comme accessoires sur Leaetoolbar code> composant Render code> méthode. Puisque vous ne fournissez que la référence de fonction qu'il ne fonctionnera pas. p> ceci code>. p> {() => {
switch(this.props.pageActive) {
case 1:
return <div>option1</div>;
case 2:
return <div>option2</div>;
}
}()} // calling the function
Selon votre liste de code, vous passez à la section The
ChangePageActive CODE> PROP versLeaguebody CODE> Composant mais essayant de l'utiliser dansLeaetoolBar code>.Vous ne passez pas la fonction
changepageactive code> àLeaetoolbar code>. Il y a aussi un problème avec votre commutateur dans le rendu.Merci, je ne reçois plus l'erreur de fonction, mais je ne peux toujours pas lire la variable pageactive dans les classes enfants