Je voudrais demander pourquoi mon état ne change pas lorsque je fais un événement onclick. J'ai cherché il y a quelque temps que je devais lier la fonction onclick dans le constructeur, mais l'état ne se met toujours pas à 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 });
// After setting a new state it still return 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
setState
ne retourne pas une promesse. Si cela fonctionnait, cela ne fonctionnait que parce que celaawait
introduisait un "tick" asynchrone dans la fonction, et il est arrivé que la mise à jour de l'état soit traitée pendant ce tick. Ce n'est pas garanti. Comme le dit cette réponse , vous devez utiliser le rappel 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 simplement effectuer un nouveau rendu, ce qui se produit automatiquement).