Je voudrais demander pourquoi mon état ne change pas quand je fais un onClick
événement. J'ai cherché il y a un moment que je dois lier l'évènement onClick
dans le constructeur mais l'état n'est toujours pas mis à jour.
Voici mon code :
import React from 'react';
import Grid from 'react-bootstrap/lib/Grid';
import Row from 'react-bootstrap/lib/Row';
import Col from 'react-bootstrap/lib/Col';
import BoardAddModal from 'components/board/BoardAddModal.jsx';
import style from 'styles/boarditem.css';
class BoardAdd extends React.Component {
constructor(props) {
super(props);
this.state = {
boardAddModalShow: false
};
this.openAddBoardModal = this.openAddBoardModal.bind(this);
}
openAddBoardModal() {
this.setState({ boardAddModalShow: true }); // set boardAddModalShow to true
/* After setting a new state it still returns a false value */
console.log(this.state.boardAddModalShow);
}
render() {
return (
<Col lg={3}>
<a href="javascript:;"
className={style.boardItemAdd}
onClick={this.openAddBoardModal}>
<div className={[style.boardItemContainer,
style.boardItemGray].join(' ')}>
Create New Board
</div>
</a>
</Col>
);
}
}
export default BoardAdd
8 votes
La réponse que vous avez accepté sur cette question n'a aucun sens.
setState
ne renvoie pas de promesse. Si ça a marché, c'est uniquement parce queawait
introduit un "tick" asynchrone dans la fonction, et il est arrivé que la mise à jour de l'état a été traitée pendant ce tick. Ce n'est pas garanti. Comme cette réponse dit, vous devez utiliser le callback d'achèvement (si vous avez vraiment besoin de faire quelque chose après la mise à jour de l'état, ce qui est inhabituel ; normalement, vous voulez juste refaire le rendu, ce qui se produit automatiquement).3 votes
Il serait bon que vous annuliez la réponse actuellement acceptée ou que vous en acceptiez une correcte, car celle-ci pourrait alors être utilisée comme doublon pour de nombreuses autres questions. Le fait d'avoir une réponse incorrecte en haut de la page est trompeur.