Material-ui Date Picker сохраняет пустое значение как Date (0) в форме Redux - PullRequest
0 голосов
/ 03 июля 2018

У меня есть форма Redux, в которой используется инструмент выбора даты для сохранения дат. Если кто-то не выберет дату и отправит форму в любом случае, дата сохраняется как 1970-01-02. К сожалению, документация , похоже, не содержит никаких реквизитов для обработки этого, и я не могу решить это с помощью проверки - эти поля должны быть необязательными.

Есть ли возможность заставить компонент не вводить дату (0), когда значение не задано? Или я должен использовать другой инструмент DatePicker? Мы используем material-ui v.0.19.4. Я экспериментировал с использованием нулевого состояния, которое будет меняться только при изменении, но это не помогло.

Вот так выглядят поля.

      <Field
        name="endOfPartnership"
        type="text"
        component={DatePicker}
        className={css.fullWidth}
        floatingLabelFocusStyle={styles.floatingLabelColor}
        underlineFocusStyle={styles.floatingLabelColor}
        floatingLabelText={intl.formatMessage(defineMessages.endOfPartnership)}
        fullWidth
        formatDate={formatDate}
        minDate={minDate}
      />

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Оказалось, что есть проблема с функцией разбора даты на строку.

У кого-то возникла проблема с преобразованием даты, и он сделал очень уродливый обходной путь. Мы переключились на moment.js, который позволил нам избежать предыдущей проблемы, и я могу подтвердить, что она отлично работает сейчас, когда не предоставлено никаких данных => средство выбора даты materialUI работает так, как должно.

Спасибо, Кристофер!

0 голосов
/ 03 июля 2018

Я нашел, где определяется поведение, просто для вашей справки. Из их исходного кода.

https://github.com/mui-org/material-ui/blob/v0.x/src/DatePicker/DatePicker.js

Вот эта строка.

value={this.state.date ? formatDate(this.state.date)

Где formatDate,

  formatDate = (date) => {
    if (this.props.locale) {
      const DateTimeFormat = this.props.DateTimeFormat || dateTimeFormat;
      return new DateTimeFormat(this.props.locale, {
        day: 'numeric',
        month: 'numeric',
        year: 'numeric',
      }).format(date);
    } else {
      return formatIso(date);
    }
  };

Наверное, поэтому дата всегда "хорошо отформатирована".

...