Javascript 为什么React会将状态设置为“以前”单击的状态?
我有一个日期的HTML列表。当我执行第一次单击时,控制台会记录Javascript 为什么React会将状态设置为“以前”单击的状态?,javascript,reactjs,Javascript,Reactjs,我有一个日期的HTML列表。当我执行第一次单击时,控制台会记录null。我必须再次单击同一日期,以便它记录正确的日期。如果我然后点击一个不同的日期,它将控制台记录上一个日期(即-它是不变的)。我必须再次单击第二个日期,才能将状态设置为新日期 所以这个过程是这样的: (操作、已单击日期的状态): (点击日期x,空), (点击日期x,日期x), (点击日期y、日期x), (点击日期y,日期y) 这是什么原因造成的?为什么状态更新不正确?说明: setState()不会立即改变此.state,但会创建
null
。我必须再次单击同一日期,以便它记录正确的日期。如果我然后点击一个不同的日期,它将控制台记录上一个日期(即-它是不变的)。我必须再次单击第二个日期,才能将状态设置为新日期
所以这个过程是这样的:
(操作、已单击日期的状态):
(点击日期x,空),
(点击日期x,日期x),
(点击日期y、日期x),
(点击日期y,日期y)
这是什么原因造成的?为什么状态更新不正确?说明:
setState()
不会立即改变此.state,但会创建挂起的状态转换。调用此方法后访问this.state
,可能会返回现有值
报告解释说:
setState()
不会立即改变此.state,但会创建挂起的状态转换。调用此方法后访问this.state
,可能会返回现有值
您应该使用回调或使用ReactJS生命周期方法 例如,组件将更新:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
dateClicked: ''
};
}
onDateClick(date) {
this.setState({
currentDateEntry: date
});
console.log(this.state.currentDateEntry);
}
render ....
}
您应该使用回调或使用ReactJS生命周期方法 例如,组件将更新:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
dateClicked: ''
};
}
onDateClick(date) {
this.setState({
currentDateEntry: date
});
console.log(this.state.currentDateEntry);
}
render ....
}
若要添加到此答案,可以将回调函数作为第二个参数传递给
setState
,一旦提交状态更改,就会调用该函数。@AlanH我发布的链接中也记录了该函数。若要添加到此答案,您可以将回调函数作为第二个参数传递给setState
,一旦提交状态更改,就会调用该函数。@AlanH我发布的链接中也记录了该函数。