我遇到了一个问题,我不知道为什么。我几天前编写了这段代码并且工作正常,但今天我收到了这个错误:Unhandled Rejection (TypeError): Cannot read property 'moment' of undefined
。
import React, { Component } from 'react'
import moment from 'moment'
import Datetime from 'react-datetime'
import './react-datetime.css'
let parseDate = str => {
if (moment(str).isValid()) {
return moment(str).toISOString()
} else {
return moment(str).toISOString()
}
}
export default class DateInput extends Component {
render() {
const yesterday = Datetime.moment().subtract(1, 'day') //Error occur on this line.
const valid = current => {
return current.isAfter(yesterday)
}
const Datetime = (
<div>
<Datetime
isValidDate={valid}
timeFormat="HHmm"
dateFormat="YYYY-MM-DD"
onChange={e => {
this.props.onChange(parseDate(e._d))
}}
/>
</div>
)
if (this.props.value) {
return { Datetime }
} else {
return <p>Inget datum angivet</p>
}
}
}
我敢打赌这个问题非常基本,但我不知道为什么会这样。
感谢阅读,希望我们能解决它!
答案 0 :(得分:1)
import Datetime from 'react-datetime'
使Datetime
可用于您的脚本范围。但是,您在render
const Datetime = (
<div>
<Datetime
isValidDate={valid}
timeFormat="HHmm"
dateFormat="YYYY-MM-DD"
onChange={e => {
this.props.onChange(parseDate(e._d))
}}
/>
</div>
)
在javascript中,函数的作用域优先于全局/脚本作用域(声明函数的位置)。由于您在声明之前的声明中使用了Datetime
,因此您引用了undefined
变量/常量
P.S。在ECMAScript 2015中,让(const)不会将变量提升到块的顶部。但是,在变量声明之前引用块中的变量会导致ReferenceError。变量位于&#34;临时死区&#34;从块的开始直到处理声明。
答案 1 :(得分:0)
Moment将争论置于其内部,这是一个全局函数
我想Datetime没有'moment'这样的功能。
也许
moment(Datetime)
const yesterday = moment(Datetime).subtract(1, 'day')
我不知道您的代码中的日期时间是什么...请查看Moment.js: Parsing