constructor(props) {
super(props);
this.state = {
active: false,
showSideBar: false,
className: ""
}
}
componentDidMount() {
if (this.props.overlay) {
this.setState({
className: "wrapper_overlay"
});
alert(this.state.className);
}
else if (this.props.SideBarWithIcon) {
this.setState({
className: "wrapper_clopsed"
});
}
}
I am updating my state with the help of the props but the component is getting props but state is not updating
5 Réponses :
setState est asynchrone. Alertez simplement dans un rappel de la méthode à la place.
if (this.props.overlay) {
this.setState(
{ className: "wrapper_overlay" },
() => alert(this.state.className);
);
}
Remarque: vous pouvez et devez également utiliser shouldComponentUpdate pour vérifier quand un setState code> l'appel est terminé
Étant donné que setstate est de nature asynchrone, il se peut que vous ne puissiez pas voir l'état mis à jour dans alerte. Vous pouvez l'utiliser dans le callback qui sera appelé une fois le setstate terminé. comme ceci
componentDidMount() {
if (this.props.overlay) {
this.setState({
className: "wrapper_overlay"
}, ()=> {alert(this.state.className);});
}
Dans React.js, l'exécution du thread de programme n'attend pas la définition de l'état et continue son exécution, jusqu'à ce que et à moins que l'opération ne soit définie dans le rappel setState () .
Votre état est défini mais comme votre alert () est après setstate c'est-à-dire pas en rappel de setState () c'est pourquoi il obtient la valeur précédente car au moment où l'état définit une nouvelle valeur, le thread n'attend pas mais exécuter l'instruction suivante qui est alert () .
if (this.props.overlay) {
this.setState({ className: "wrapper_overlay" }, () => alert(this.state.className););
}
J'espère que cela fonctionne pour vous.
Utilisez simplement la méthode de rappel pour mettre à jour l'état, comme setState () peut fonctionner de manière asynchrone.
this.setState(() => { className: "wrapper_clopsed" });
Vous pouvez abandonner le constructeur et écrire directement state = {}. Pour plus d'informations: hackernoon.com/…