Почему мой виджет календаря не позволяет мне выбирать дни после моего начального дня? - PullRequest
0 голосов
/ 23 февраля 2020

Я построил виджет календаря с нуля, и я пытаюсь реализовать правило, которое позволит пользователям только нажимать / выбирать дату окончания, которая следует за выбранной датой начала.

Я сохранил даты начала и окончания в состоянии компонента, и когда я консоль веду журнал начала и конца дня, все выглядит хорошо. И когда я удаляю day > this.state.selectedStartDay из оператора if / else, он позволяет мне выбирать даты после даты начала (хотя это также позволяет мне выбирать более ранний день в том же месяце, который равен не правильное поведение).

Когда я запускаю этот код с оператором журнала консоли и без строки кода day > this.state.selectedStartDay в этом операторе if / else, я получаю правильные пронумерованные дни начала и окончания (т.е. если я выбрал 1 февраля и 14 февраля день начала записывает 1, а день окончания записывает 14). И когда я запускаю его со строкой кода day > this.state.selectedStartDay, я получаю странное поведение:

  • Это ограничивает выбор пользователя датами, которые идут после выбранной даты начала, но некоторые даты после дата начала также будет ограничена (т. е. если я выберу 4 февраля, то любые дни, начиная с 10 февраля, также будут ограничены

Я сделал много журналов консоли и сами данные кажутся правильными, но я не могу понять, почему происходит такое поведение. Помощь приветствуется!

  handleDateClick(month, day, yr) {
    let clicks = this.state.clicks + 1;
    let realMonthNum = month + 1;

    this.setState({ clicks });

    if (this.state.clicks % 2 === 0) {
      this.setState({ selectedStartMonth: realMonthNum });
      this.setState({ selectedStartDay: day });
      this.setState({ selectedStartYr: yr });
      this.resetEndDate();
    } else if (month >= (this.state.selectedStartMonth - 1) && day > this.state.selectedStartDay) {
      console.log('Start day: ' + this.state.selectedStartDay);
      console.log('End day: ' + day);
      this.setState({ selectedEndMonth: realMonthNum });
      this.setState({ selectedEndDay: day });
      this.setState({ selectedEndYr: yr });
    }
  }

ОБНОВЛЕНИЕ:

Я не уверен почему, но даже использование yr в выражении сравнения не работает: (

1 Ответ

0 голосов
/ 23 февраля 2020

Хорошей практикой является использование setState один раз, когда вы завершаете sh ваш код logi c. Делайте logi c для локальных переменных вместо использования состояния сразу после его установки (this.state.selectedStartMonth)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...