JavaScript является синхронным и однопоточным языком.Таким образом, он работает построчно
Вы ведете консольный журнал до того, как ваше состояние изменится, поэтому оно, очевидно, даст 2. Даже если вы console.log после установки состояния, вы также можете не получить ожидаемый результатпотому что установленное состояние требует времени для выполнения.
// Это может или не может работать
handleChange = (e) => {
// the input value was 2, then I enter 3
console.log(this.state.mainField.firstInput); // expect 2
this.setState({ mainField: newData });
console.log(this.state); // expect { mainField: { firstInput: 3 } }
}
Но это, безусловно, будет работать
handleChange = (e) => {
// the input value was 2, then I enter 3
console.log(this.state.mainField.firstInput); // expect 2
this.setState({ mainField: newData },()=>{
console.log(this.state); // expect { mainField: { firstInput: 3 } }
});
}