2017-07-16 141 views
0

我有一個關於momentjs的問題,我不知道爲什麼。我前幾天寫了這段代碼,它工作的很好,但今天我得到了這個錯誤:Unhandled Rejection (TypeError): Cannot read property 'moment' of undefined無法讀取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> 
    } 
    } 
} 

我敢打賭,問題是非常基本的,但我不知道爲什麼會發生這種情況。

感謝您的閱讀,我希望我們能解決它!

+1

爲什麼你之前使用Datetime過寫'Datetime'對象? – Cristy

+0

@Cristy是什麼意思? –

回答

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中,函數的範圍優先於全球/腳本範圍內(在您的函數聲明)。而且因爲你在一份聲明中如果引用到undefined變量聲明/恆

P.S. In ECMAScript 2015, let (const) will not hoist the variable to the top of the block. However, referencing the variable in the block before the variable declaration results in a ReferenceError. The variable is in a "temporal dead zone" from the start of the block until the declaration is processed.

+0

我明白了,不知道!我的朋友建議分離邏輯從JSX(hehe).. –

+0

@MartinNordström你有一個好朋友:D – taha

0

瞬間將自身內部的參數,它的全局函數。
我想Datetime沒有像'時刻'這樣的功能。

也許

moment(Datetime) 

const yesterday = moment(Datetime).subtract(1, 'day') 

,我不知道什麼是日期時間在你的代碼......看看Moment.js: Parsing

+0

嘿。我遵循datepickers文檔,他們展示瞭如何禁用不同類型的日期:https://github.com/YouCanBookMe/react-datetime。所以我不認爲'時刻(Datetime)'是要走的路。謝謝! –

+0

每天工作...你不會得到moment.js庫中的時間函數在一些反應對象的時間解釋... –

+0

好吧,好老兄! –