如何从react-datepicker 2.0.0输入获取字符串值?

时间:2018-12-04 12:26:32

标签: javascript reactjs react-datepicker

正在努力从React / Redux应用程序中的react-datepicker获取日期作为字符串。后端服务将日期字段作为字符串使用特定于前端用户语言设置的格式的字符串。因此,在Redux中将日期存储为字符串更容易。

在2.0.0之前的版本中,react-datepicker用于矩对象,可以使用momentDate.format()进行转换。

2.0.0版可使用原始JS日期。 react-datepicker使用未导出的内部方法(string)执行Date <-> formatDate转换。无法访问这些功能。

当前使用变通方法对moment.js进行转换。方法有缺点:

  • moment.js和react-datepicker格式掩码不匹配(例如,字母大小写不同)
  • 额外的库依赖项(moment.js)

当前代码:

import React from 'react';
import OriginalDatepicker from 'react-datepicker';
import moment from 'moment';

const dateFormat = 'dd.MM.yyyy'; // Depends on user current locale.
const momentDateFormat = dateFormat.toUpperCase();

function parseDate(dateString) {
  if (dateString) {
    return moment(dateString, momentDateFormat).toDate();
  } else {
    return null;
  }
}

function format(date) {
  if (date) {
    return moment(date).format(momentDateFormat);
  } else {
    return null;
  }
}

const ApplicationSpecificDatepicker = props => {
  if (props.hasOwnProperty('selectedString')) {
    const { selectedString, ...remaining } = props;
    props = { ...remaining, selected: parseDate(props.selectedString) };
  }
  const onChangeOverride = (...args) => {
    if (props.onChangeAsString) {
      const [date, ...remaining] = args;
      const stringDate = format(date);
      props.onChangeAsString(stringDate, ...remaining);
    }
    if (props.onChange) {
      props.onChange(...args);
    }
  }
  return (
    <OriginalDatepicker
      dateFormat={ dateFormat }
      { ...props }
      onChange={ onChangeOverride }
    />
  );
};

const DatepickerUsage = () => (
  <ApplicationSpecificDatepicker selectedString={ '31.12.2018' }
    onChangeAsString={ (date) => console.log(date) }
    />
);

访问react-datepicker 2.0.0输入字符串值的推荐解决方案是什么?

0 个答案:

没有答案