Vorrei chiedere perché il mio stato non cambia quando faccio un evento onclick. Qualche tempo fa ho cercato di associare la funzione onclick nel costruttore, ma lo stato non si aggiorna. Ecco il mio codice:
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
non restituisce una promessa. Se ha funzionato, ha funzionato solo perchéawait
introduce un "segno di spunta" asincrono nella funzione, ed è successo che l'aggiornamento dello stato è stato elaborato durante quel segno di spunta. Non è garantito. Come dice questa risposta , devi usare il callback di completamento (se hai davvero bisogno di fare qualcosa dopo che lo stato è stato aggiornato, il che è insolito; normalmente, vuoi solo eseguire nuovamente il rendering, che si verifica automaticamente).