Javascript 为什么React会将状态设置为“以前”单击的状态?

Javascript 为什么React会将状态设置为“以前”单击的状态?,javascript,reactjs,Javascript,Reactjs,我有一个日期的HTML列表。当我执行第一次单击时,控制台会记录null。我必须再次单击同一日期,以便它记录正确的日期。如果我然后点击一个不同的日期,它将控制台记录上一个日期(即-它是不变的)。我必须再次单击第二个日期,才能将状态设置为新日期 所以这个过程是这样的: (操作、已单击日期的状态): (点击日期x,空), (点击日期x,日期x), (点击日期y、日期x), (点击日期y,日期y) 这是什么原因造成的?为什么状态更新不正确?说明: setState()不会立即改变此.state,但会创建

我有一个日期的HTML列表。当我执行第一次单击时,控制台会记录
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我发布的链接中也记录了该函数。