Можно использовать unstable_batchedUpdates
, как описано в в этом ответе , чтобы синхронизировать обновления состояния:
// this.state.foo === 0 here
ReactDOM.unstable_batchedUpdates(() => {
this.setState({ foo: this.state.foo + 1});
});
// this.state.foo === 1 here
Этот метод здесь не применим, необходимость в нем указывает на то, чтоэто проблема.
В документации предлагается использовать функцию обновления, если состояние setState
зависит от предыдущего состояния, и использовать функцию обратного вызова, если вычисленный код зависит от ранее установленного состояния:
setState () не всегда сразу обновляет компонент.Это может пакетировать или отложить обновление до позже.Это делает чтение this.state сразу после вызова setState () потенциальной ловушкой.Вместо этого используйте componentDidUpdate или обратный вызов setState (setState (Updater, callback)), который гарантированно сработает после применения обновления.Если вам нужно установить состояние на основе предыдущего состояния, прочитайте об аргументе средства обновления ниже.
Из кода неясно, почему временные значения (errorIntialValue
, errorAge
, errorRollno
)должен храниться в состоянии компонента.Они, вероятно, не должны и должны обновляться только один раз, что-то вроде:
if (errorIntialValue || errorAge || errorRollno) {
// update the state with errors
} else {
// update the state with data
}