2017-10-30 331 views
0

私は、date-pickerを日付コンポーネントとして使用するreduxフォームを持っています。これは、編集モードでフォームを開くときに、日付フィールドに値がないか、空白( "")値。この場合、私のreact-date-pickerコンポーネントが解析する適切な値が見つからない場合、コンポーネントに無効な日付が表示されます。nullを渡すか、日付がないかチェックするかチェックしますそれは空白のパスが未定義かヌルです、私はそれをたくさんグーグルしましたが、適切な答えは見つかりませんでした。私のコードは私のReduxの形式で、このreact-date-pickerの空の初期値を設定する方法は?

私のカスタム日付ピッカーコンポーネントのようになります。

import { _dateField, } from '../../../containers/reduxFormFields/formFields'; 
 

 
<Row> 
 
\t \t \t \t \t \t \t \t \t \t <Col md={6}> 
 
\t \t \t \t \t \t \t \t \t \t \t <FormGroup> 
 
\t \t \t \t \t \t \t \t \t \t \t \t <ControlLabel bsClass="">Actual Start Date</ControlLabel> 
 
\t \t \t \t \t \t \t \t \t \t \t \t <div className="dateTimeSdiv"> 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t <Field name="actualStartDate" component={_dateField} className="form-control" formType="edit" defaultValue={moment(this.props.initialValues.actualStartDate)} /> 
 
\t \t \t \t \t \t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t \t \t \t \t </FormGroup> 
 
\t \t \t \t \t \t \t \t \t \t </Col> 
 
\t \t \t \t \t \t \t \t \t \t <Col md={6}> 
 
\t \t \t \t \t \t \t \t \t \t \t <FormGroup> 
 
\t \t \t \t \t \t \t \t \t \t \t \t <ControlLabel bsClass="">Actual End Date</ControlLabel> 
 
\t \t \t \t \t \t \t \t \t \t \t \t <div className="dateTimeSdiv"> 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t <Field name="actualEndDate" component={_dateField} className="form-control" formType="edit" defaultValue={moment(this.props.initialValues.actualEndDate)} /> 
 
\t \t \t \t \t \t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t \t \t \t \t </FormGroup> 
 
\t \t \t \t \t \t \t \t \t \t </Col> 
 
\t \t \t \t \t \t \t \t \t </Row>

と私の日付ピッカーコンポーネントは次のようになります。

export const _dateField = ({ input, placeholder, defaultValue, className, formType,disabledValue, meta: { touched, error } }) => {console.log('values');console.log(defaultValue) 
 
switch (formType) { 
 
\t \t case "edit": 
 
\t \t \t return (
 
\t \t \t \t <div className="dateTimeSdiv"> 
 
\t \t \t \t \t <DateField className={(touched && error) ? className + " error" : className} expandOnFocus={false} dateFormat="YYYY-MM-DD HH:mm:ss" updateOnDateClick forceValidDate defaultValue={defaultValue} minDate={moment()} disabled = {disabledValue}> 
 
\t \t \t \t \t \t <DatePicker {...input} selected={input.value ? moment(input.value) : null} navigation locale="en" forceValidDate highlightWeekends highlightToday weekNumbers={false} weekStartDay={1} todayButton={false}></DatePicker> 
 
\t \t \t \t \t </DateField> 
 
\t \t \t \t \t {touched && error && <span> {error} </span>} 
 
\t \t \t \t </div> 
 
\t \t \t); 
 
\t \t case "create": 
 
\t \t \t return (
 
\t \t \t \t <div className="dateTimeSdiv"> 
 
\t \t \t \t \t <DateField className={(touched && error) ? className + " error" : className} expandOnFocus={false} dateFormat="YYYY-MM-DD HH:mm:ss" updateOnDateClick forceValidDate defaultValue={moment()} minDate={moment()} disabled = {disabledValue}> 
 
\t \t \t \t \t \t <DatePicker {...input} selected={input.value ? moment(input.value) : null} navigation locale="en" forceValidDate highlightWeekends highlightToday weekNumbers={false} weekStartDay={1} todayButton={false}></DatePicker> 
 
\t \t \t \t \t </DateField> 
 
\t \t \t \t \t {touched && error && <span> {error} </span>} 
 
\t \t \t \t </div> 
 
\t \t \t); 
 
\t } 
 
};

編集に使用している2つのseprateコンポーネントがあり、それぞれから作成します。 何か助けが受け入れられるでしょう。

答えて

0

null可能な日付参照を渡しているときに、あなたが絶対に確かでない限り、momentオブジェクトとして渡された値を必ずしも変換しようとしないことを確認したいと思うでしょう。日付の値は、有効な日付形式の有効な日付になります。

私は、目的の形式で日付を解析し、その形式で日付を返すヘルパークラスを作成するか、解析できない場合は""を返します。

moment(<value here>).isValid()メソッドを使用して、渡す日付が有効な日付かどうかを判断し、有効でない場合は空の文字列を返します。すなわち:

moment(this.props.initialValues.actualStartDate).isValid() ? this.props.initialValues.actualStartDate : ""

あなたのクラスのヘルパーメソッドを作成した場合、あなたはそれは常に日付または""のいずれかを返すように、日付の値を配置することを呼び出すことができます。

+0

解決のためのhiマークありがとうございました。 –

+0

ハイマーク申し訳ありませんが、私は瞬間(this.props.initialValues.actualStartDate).isValid()を試してみましたか? this.props.initialValues.actualStartDate: ""しかし、日付入力時に同じ "無効な日付"を得ることはできませんでした。私はヘルパークラスを使用していませんでしたが、私はこのリアクションデートコンポーネントをUI内のどこから呼び出すかを指定しました。 –

+0

適切な日付書式の値を指定しないと、モーメントは有効な日付を返しません。それが私の答えで作ろうとしていた全体のポイントです。あなたは瞬間を与えようとする価値を検証し、それに応じてデータを調整する必要があります。 –

0

にコードを変更するだけで、この

defaultValue = {moment(this.props.initialValues.actualStartDate)}

ように私が反応し、日付コンポーネントに(DBから来る)私の日付を渡した私のコードを変更し、ここにいくつかの回避策を見つけます

defaultValue = {this.props.initialValues.actualStartDate}

react-date-pickerのdefaultValueプロパティは、文字列として渡されたときに機能していたのではなく、モーメントオブジェクトとして値を取得していませんでした。

関連する問題