我想问一下,为什么我的状态在 onClick
事件中没有改变。我之前搜索过,需要在构造函数中绑定 onClick
函数,但是状态仍然没有更新。
这是我的代码:
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
setState
函数不会返回一个Promise。如果它起作用了,只是因为await
将一个异步“tick”引入了该函数,并且恰好在那个“tick”期间处理了状态更新。这并不是一定保证的。正如此回答所说,你需要使用完成回调(如果确实需要在状态更新后执行某些操作,这很少见;通常,你只想重新渲染,这会自动发生)。请注意,原文中的"which is unusual; normally, you just want to re-render" 这句话表示:“这很少见;通常,您只需要重新渲染”。 - T.J. Crowder