无法阅读属性'时刻'未定义的

时间:2017-07-16 21:26:09

标签: javascript reactjs momentjs

我遇到了一个问题,我不知道为什么。我几天前编写了这段代码并且工作正常,但今天我收到了这个错误: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>
    }
  }
}

我敢打赌这个问题非常基本,但我不知道为什么会这样。

感谢阅读,希望我们能解决它!

2 个答案:

答案 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