У меня есть функция handleClick
, прикрепленная к дню в моем календаре:
// Handles auto fill in dates for check-in and checkout
handleClick(month, day, yr) {
let newClicks = this.state.clicks + 1;
let realMonthNum = month + 1;
this.setState({ clicks: newClicks });
if (newClicks % 2 !== 0) {
this.setState({ selectedStartMonth: realMonthNum });
this.setState({ selectedStartDay: day });
this.setState({ selectedStartYr: yr });
this.resetEndDate();
} else {
this.setState({ selectedEndMonth: realMonthNum });
this.setState({ selectedEndDay: day });
this.setState({ selectedEndYr: yr });
}
}
По сути, она должна обновлять срезы начальной даты моего состояния при первом клике, а затем срезы конечной даты моего состояния на втором клике. Это работает, однако, когда я смотрю на свое состояние в консоли, я заметил, что начальный и конечный срезы моего состояния обновляются на один шаг позже. Например, по первому клику мое состояние - это начальные значения. После того, как я выполню второй щелчок, в моем состоянии обновятся selectedStartMonth
, selectedStartDay
и selectedStartYr
. И только после третьего щелчка обновляются selectedEndMonth
, selectedEndDay
и selectedEndYr
. Почему setStates задерживается?
Вот как выглядит мое onClick
событие:
<div className="number-days">
{this.state.days.map(day => <div className="number" onClick={() =>
this.props.handleClick(currentMonth, day, yr)}>{day}</div>)}
</div>
А вот как выглядит начальное состояние:
this.state= {
currentDay: currentDate.getDate(),
currentMonth: currentDate.getMonth(),
nextMonth: (currentDate.getMonth() + 1) % monthsLength,
currentYr: currentDate.getFullYear(),
selectedStartMonth: '',
selectedStartDay: '',
selectedStartYr: '',
selectedEndMonth: '',
selectedEndDay: '',
selectedEndYr: '',
clicks: 0
}
И при необходимости вот что выводит консольный журнал при первом и втором щелчке:
![enter image description here](https://i.stack.imgur.com/S5AGQ.png)