Простая функция для проверки флажков в ReactJS

#javascript #reactjs #checkbox #ecmascript-6 #mapping

#javascript #reactjs #флажок #ecmascript-6 #сопоставление

Вопрос:

Я создал функцию ограничения выбора, которая гарантирует, что общий флажок выше минимального значения и ниже максимального значения, эти значения были взяты из JSON, из которого сопоставлены флажки, теперь ограничение выбора работает, но я пытаюсь добавить проверку для отображения предупреждений с помощью onblur, но я не уверен, как можно преобразовать ту же функцию в функцию проверки onblur. например, если кто-то снимает флажок, на консоли отображается, что вам нужно выбрать минимум 3, пока не будет установлено значение 3, по той же логике, что и selectData().

Функция

   selectData(id, event) {
    let isSelected = event.currentTarget.checked;
    if (isSelected) {
      if (this.state.currentData < this.props.max) {
        this.setState({ currentData: this.state.currentData   1 });
      } else {
        event.preventDefault();
        event.currentTarget.checked = false;
      }
    } else {
      if (this.state.currentData >= this.props.min) {
        this.setState({ currentData: this.state.currentData - 1 });
      } else {
        event.preventDefault();
        event.currentTarget.checked = true;
      }
    }
  }
  

Полный код:https://codesandbox.io/embed/48o2jo2500?fontsize=14

Комментарии:

1. Как это onblur событие будет обработано?

2. из формы ввода типа <input onblur={функция}….

3. Не могли бы вы, пожалуйста, привести пример в code.pen. Прокомментировав строку и добавив событие, которое только console.log('x') тогда я смогу попытаться добавить функциональность, которую вы хотите

4. @AlxL Прошу прощения, но ссылка на полный код не работает. Не могли бы вы, пожалуйста, исправить это, чтобы я мог видеть полный исходный код компонента?

5. codesandbox.io/embed/8212q2pmw0?fontsize=14

Ответ №1:

Ваш общий подход, похоже, должен сработать, просто нужна утонченность для фактической реализации состояний ошибки. Однако здесь было бы предложено обновить ваше !isSelected amp;amp; this.state.currentData < this.props.min условие, чтобы можно было выбрать менее трех, но отображать пользователю состояние ошибки.

   ...
    } else {
      if (this.state.currentData >= this.props.min) {
        // this.setState({ currentData: this.state.currentData - 1 });
        // UPDATE:
        this.setState((state) => ({ currentData: state.currentData - 1 }));
      } else {
        event.preventDefault();
        // Don't force the box to be selected, show error state instead
        // Disable calls to filtering, sorting, etc. until error resolved
        // event.currentTarget.checked = true;
      }
    }
  }
  

Базовая реализация:

Комментарии:

1. Имейте в виду, что это setState асинхронно, и доступ к предыдущему currentData значению, как вы это делали, небезопасен. Вы должны написать this.setState((state) => ({ currentData: state.currentData - 1 }));