J'ai un formulaire avec un bouton d'envoi. Ce formulaire appelle une fonction onclick qui définit l'état de quelque chose de faux à vrai. Je veux ensuite transmettre cet état au parent afin que s'il est vrai, il rend le composant A, mais s'il est faux, il rend le composantB.
Comment pourrais-je faire cela en réaction? Je sais que je dois utiliser l'état ou les accessoires, mais je ne sais pas comment le faire. cela contredit-il également le principe de réaction à sens unique?
ComposantA code:
<form onSubmit={this.handleClick}>
handleClick(event) {
this.setState({ decisionPage: true });
event.preventDefault();
};
Composant parent qui contrôle ce qu'il affiche:
return (
<div>
{this.props.decisionPage ?
<div>
<LoginPage />
</div>
:
<div>
<Decision showThanks={this.props.showThanks}/>
</div>
}
</div>
)
Déplacez handleClick
vers le parent et passez-le au composant enfant comme accessoire.
<LoginPage handleClick={this.handleClick.bind(this)}/>
Maintenant dans le composant enfant:
<form onSubmit={this.props.handleClick}>
De cette façon, la soumission du formulaire mettra à jour directement l'état du composant parent. Cela suppose que vous n'avez pas besoin d'accéder à la valeur d'état mise à jour dans le composant enfant. Si vous le faites, vous pouvez alors retransmettre la valeur d'état du parent à l'enfant comme accessoire. Le flux de données à sens unique est maintenu.
<LoginPage handleClick={this.handleClick.bind(this)} decisionPage={this.state.decisionPage}/>
Voici un exemple de la façon dont nous pouvons transmettre des données de l'enfant au parent (j'ai eu le même problème et utiliser le sortir avec cela)
Sur le parent, j'ai une fonction (que j'appellerai d'un enfant avec des données pour ça)
handleEdit(event, id){ //Fuction
event.preventDefault();
this.setState({ displayModal: true , responseMessage:'', resId:id, mode:'edit'});
}
dishData = <DishListHtml list={products} onDelete={this.handleDelete} onEdit={(event, id) => this.handleEdit(event, id)}/>;
Au niveau du composant enfant:
<div to="#editItemDetails" data-toggle="modal" onClick={(event)=>this.props.onEdit(event, listElement.id) }
className="btn btn-success">
Étapes simples:
Passez la méthode créée dans Parent à enfant sous la forme props
.
Acceptez les accessoires du parent à l'aide de this.props
suivi du nom de la méthode et lui passer l'état d'enfant comme argument.
Dans React vous pouvez transmettre des données du parent à l'enfant à l'aide d'accessoires. Mais vous avez besoin d'un mécanisme différent pour transmettre les données de l'enfant au parent.
Une autre méthode consiste à créer une méthode de rappel. Vous passez la méthode de rappel à l'enfant lors de sa création.
class Parent extends React.Component {
myCallback = (dataFromChild) => {
//use dataFromChild
},
render() {
return (
<div>
<ComponentA callbackFromParent={this.myCallback}/>
</div>
);
}
}
Vous transmettez la valeur decisionPage de l'enfant au parent via la méthode de rappel passée par le parent.
class ComponentA extends React.Component{
someFn = () => {
this.props.callbackFromParent(decisionPage);
},
render() {
[...]
}
};
SomeFn pourrait être votre méthode handleClick.