от
Я знаю, что это спрашивали тысячу раз, но я не уверен, как я делаю это неправильно. Я прочитал тонны StackOverflow и то, что я ищу: как я делаю это неправильно? Итак, рассмотрим следующую функцию:
setFormValues(fieldName, value) {
    let values = this.state.values;

    values[fieldName] = value;

    this.setState({
      values: values
    }, () => {
      debounce(() => {
        this.setState({
          validationErrors: validator(this.state.validations, this.state.values),
        });
      }, 350);
    });
  }
Каждый раз, когда элемент изменения стоимости, мы передаем эту форму (каждый элемент имеет свой собственный класс реагируешь, который вызывает эту функцию). После того, как мы устанавливаем значение в форме (используется для размещения данных), мы должны проверить значения в форме. Давайте посмотрим на файл валидатора:
import React from 'react';
import moment from 'moment';
import startCase from 'lodash.startcase';

/**
 * Validate the form values.
 */
export const validator = (validations, formValues) => {
  let validationMessages = {};

  for (const key in formValues) {
    if (validations.hasOwnProperty(key)) {
      const fieldValidations  = validations[key];
      const validationMessage = createValidationMessage(key, formValues[key], formValues, fieldValidations);

      if (validationMessage !== null) {
        validationMessages[key] = validationMessage;
      }
    }
  }

  return validationMessages;
}

/**
 * Create a a validation message when the validatiom for the form value
 * fails against the form field validations.
 */
const createValidationMessage = (fieldName, value, formValues, fieldValidations) => {
  let message = null;

  fieldValidations.forEach((fieldValidation) => {
    if (fieldValidation.hasOwnProperty('cannot_percede_field')) {
      if (formValues.hasOwnProperty(fieldValidation.cannot_percede_field)) {
        const formValue = formValues[fieldValidation.cannot_percede_field];

        if (isFutureDate(value, fieldValidation)) {
          message = {
            message: 'Date cannot be greator then today.',
            isError: fieldValidation.show_error,
          };
        }

        if (isDateLessThen(value, formValue, fieldValidation)) {
          message = {
            message: 'Date cannot be less then: '   startCase(fieldValidation.cannot_percede_field)   '.',
            isError: fieldValidation.show_error,
          };
        }
      }
    }
  })

  return message;
}

/**
 * Is the date in question greator then date saved?
 */
const isFutureDate = (value, validationObject) => {
  if (validationObject.cannot_be_future_date) {
    return moment(value).isAfter(moment());
  }

  return false;
}

/**
 * Is the date in question less then the date saved?
 */
const isDateLessThen = (value, formValue, validationObject) => {
  if (validationObject.cannot_percede_field) {
    return moment(value).isBefore(formValue);
  }

  return false;
}
Все что мы делаем цикл по значениям, проверьте, если оценщик имеет конкретные правила для этого поля. В этом случае, если поле государства он не может предшествовать другому полю, мы заявляем, сообщения о проверке, если поле в вопрос больше, чем сегодня, мы опять установить сообщение. В чем проблема? Если я снимаю дребезга, и оставить его как насытить сообщения проверки, если есть какие-то, форма ввода очень медленно. Но работы проверки и сообщения отображаются должным образом. если я оставлю дребезга, и силу сбоя (например, поле даты, которая предшествует еще одно поле даты) ничего не происходит. Я понимаю, что вопрос может быть я призываю дребезга снова и снова, и таким образом, функция не срабатывает. но когда вы выберите дату, она должна только однажды сказала, Подождите 350 мс, а затем либо показать или нет ошибки проверки. Что я делаю не так с lodashes дребезга такие, что она даже не работает?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
...