我使用的是React-Datepicker和MomentJS。但是当我想使用Moment来设置startDate时,这个值在日期选择器字段中给出了无效的日期。
当我在控制台中登录this.state.startDate时,控制台会显示以下信息:"startdate: 27-11-2018",格式为'DD-MM-YYYY‘。此格式也用于DatePicker组件。
import * as React from "react";
import * as ReactDOM from "react-dom";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import * as moment from "moment";
import "moment/locale/nl";
export class DateContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
startDate: moment().format('DD-MM-YYYY'),
};
}
render() {
console.log('startdate:',this.state.startDate);
return (
<div className="date-Filter">
<div className="date-Filter-Title">Release Date</div>
<DatePicker
onChange={this.handleStartDate}
selected={this.state.startDate}
dateFormat="DD-MM-YYYY"
isClearable={true}
placeholderText="Select a date other than today or yesterday"
fixedHeight={true}
tetherConstraints={ [] }
locale="nl"
popperPlacement="right-start"
popperModifiers={{
flip: {
enabled: false
},
preventOverflow: {
enabled: true,
escapeWithReference: false
}
}}
selectsStart
startDate={this.state.startDate}
className="startDate"
showMonthDropdown
showYearDropdown
/>
</div>
);
}
}有人能给我解释一下为什么浏览器里显示的是无效日期吗?
我的依赖关系:
"dependencies": {
"moment": "^2.22.2",
"react": "^16.6.0",
"react-datepicker": "^2.0.0",
"react-dom": "^16.6.0",
"sass-loader": "^7.1.0",
"searchkit": "^2.3.1-alpha.4"
},发布于 2018-12-11 20:32:46
使用startDate: moment().toDate()。
.format('DD-MM-YYYY')返回字符串,而DatePicker react组件的选定属性需要Date对象。
发布于 2019-04-18 00:48:57
从Hacker0x01 -“直到1.8.0版本,这个包一直使用Moment.js。从v2.0.0开始,我们切换到使用原生Date对象来减小包的大小。如果你要从1.8.0切换到2.0.0或更高版本,请查看上面的更新示例,请查看示例网站以获取最新的示例。”
https://github.com/Hacker0x01/react-datepicker
我也有类似的问题。我将尝试将原生日期转换为react-datepicker完成其工作后的某个时刻。
发布于 2019-10-06 05:04:10
@Elvira,我在使用react-datepicker@2.0.0时遇到了同样的挑战。遵循你所使用的任何第三方包是至关重要的。由ES6推广的The issue of modules认为moment.js是react-datepicker中的额外负担,因为moment.js是一个一体化的软件包,即import moment from 'moment';
模块的概念使我们能够通过简单地导出对象、函数、类或变量,然后在其他文件中需要的地方导入它们,从而使它们对外部世界可用。
从react-datepicker@2.0.0开始,moment.js was removed as a dependency和团队开始使用原生javascript Date对象与date-fns配对,以实现datepicker中的所有date功能。检查react-datepicker calendar component的propTypes,您将注意到所有日期都被声明为PropTypes.instanceOf(Date)。
解决方案:坚持使用原生JavaScript Date对象。在用户从您的日历(read: react-datepicker)中选择日期之后,您始终可以使用
moment.js将该date对象转换为任何格式。
export class DateContainer extends React.Component {
constructor(props) {
super(props);
// Used 'started' to avoid name conflicts, and return date object
this.state = { started: new Date(), };
}
render() {
const { started } = this.state
return (
// other jsx...
<DatePicker
// other props...
selected={started}
startDate={started}
/>
);
}
}下面是我如何处理这种情况的:Environment: react@16.9.0,react-redux@7.1.1,react -
@2.0.0,yup@0.27.0和Formik@1.5.8 (在react中处理表单,变得容易)。
// stateless component
const InputForm = ({
// other destructered props...
dispatch = f => f
}) => {
const values = {
// initial state
}
return (
<Formik
// other props...
onSubmit={
async (values) => {
// Here is my solution...
// convert date object from react-datepicker using moment.js,
// before i dispatch my state object.
const userData = {
...values,
start_date: moment(values.start_date).format('YYYY-MM-DD')
}
await dispatch(someAction(userData));
// ...
}
}
/>
)
};
export default connect()(InputForm);https://stackoverflow.com/questions/53501134
复制相似问题