2017-07-16 1 views
0

私はmomentjsに問題があり、なぜ私には分かりません。私は数日前にこのコードを書いて、うまくいきましたが、今日はこのエラーがあります:Unhandled Rejection (TypeError): Cannot read property 'moment' of undefined未定義のプロパティ 'moment'を読み取ることができません

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

なぜあなたは定数あなたがundefined変数に参照している宣言/前の文でDatetimeを使用するので 'Datetime'オブジェクトを介して、書くのか? – Cristy

+0

@クリスティーはどういう意味ですか? –

答えて

1

import Datetime from 'react-datetime'を見てみましょう、あなたのスクリプトの範囲で使用するためDatetimeが利用できるようになります。あなたはJavaScriptでrender

const Datetime = (
    <div> 
    <Datetime 
     isValidDate={valid} 
     timeFormat="HHmm" 
     dateFormat="YYYY-MM-DD" 
     onChange={e => { 
     this.props.onChange(parseDate(e._d)) 
     }} 
    /> 
    </div> 
) 

の内側にそれを再度設定するただし、関数のスコープは、(あなたの関数が宣言されている)グローバル/スクリプトスコープよりも優先されます。そして、あなたは

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)のロジックをsepareteに提案した。 –

+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。だから私は '瞬間(日時計)'が行く方法だとは思わない。ありがとう! –

+0

毎日勉強しています... moment.jsライブラリからmoment関数を得ることはありません。時間の説明のためにいくつかの反応オブジェクト... –

+0

よかった、素敵なおい! –

関連する問題