2016-12-12 7 views
0

私はcheckincheckoutのフィールドを持ち、pickaday jquery datepickerを反応コンポーネントpickadayに統合しようとしています。私はチェックインとチェックアウトの両方のフィールドを親コンポーネントの状態として持っていて、作成したコンポーネントのdatepickerにそれらを渡します。私がしたのはcomponentDidMountを使ってを初期化し、それが期待どおりに動作することです。ここでの問題は、最初にminDateを設定できるのは、状態が変わるときに値を更新しないということだけです。jqueryを反応コンポーネントに追加して状態を更新する

DatePicker.js.jsx私はこのようなコンポーネント(minDateは私が唯一の初期負荷で動作します渡し、その後動作していない??)

  {/*Checkin and checkout dates*/} 
      <div className="col s12 m6 l6 rd-custom-input"> 
       <DatePicker name={'checkIn'} value={this.props.checkIn} 
          onChange={this.handleNamedChange} minDate={this.props.checkIn}/> 
      </div> 
      <div className="col s12 m6 l6 rd-custom-input"> 
       <DatePicker name={'checkOut'} value={this.props.checkOut} 
          onChange={this.handleNamedChange} minDate={this.props.checkIn}/> 
      </div> 
の上に呼び出す親コンポーネントで

var DatePicker = React.createClass({ 
//This is a callback to parent component for updating the state 
    changeDuration: function (date) { 
     this.props.onChange(this.props.name, date); 
    }, 


    componentDidMount: function() { 
     var _self = this; 

     var picker = new Pikaday({ 
      field: document.getElementById(this.props.name), 
      format: 'D MMM YYYY', 
      onSelect: function() { 
       _self.changeDuration(this.getMoment().toDate()) 
      }, 
      minDate: this.props.minDate 
     }); 
    }, 


    render: function() { 
     return (
      <input type="text" id={this.props.name} defaultValue={this.props.value}/> 
     ) 
    } 
}); 

datedatepickerに選択すると、componentDidMountの状態が間違っていると思われます。誰かが私に何が間違っているのか教えてもらえますか?

+0

個人的にはReactでjQuery UIライブラリを使用せず、使用する特定の特定のライブラリを見つけることができます。主な問題は、jQueryとReactの両方がDOMを制御してDOMを変更できるようにすることです。 jQueryがDOM/UIを更新し、リアクション通知が何か変更されたが、変更されなかった場合に実行できます。 DOMはそれが望むようにDOMを再レンダリングします。あなたはそのタイプの問題を抱えていないかもしれませんが、あなたの注意にそれを持ってきたかったかもしれません。 – finalfreq

+0

@finalfreqはい..私はあなたがここにいると思っています..しかし、私が反応のために見つけたすべてのdatepickerライブラリはwebpackを使用していて、アセットパイプライン。 jqueryライブラリは、私のケースでは他の依存関係がなくても簡単に統合できます。 – Abhilash

答えて

1

これは、コンポーネントがマウントされてからcomponentDidMountライフサイクルイベントが発生し、探しているものがrenderメソッドで何かを実行するためです。

var DatePicker = React.createClass({ 

    picker: null, 

    changeDuration: function (date) { 
     this.props.onChange(this.props.name, date); 
    }, 


    componentDidMount: function() { 
     var _self = this; 

     var picker = new Pikaday({ 
      field: document.getElementById(this.props.name), 
      format: 'D MMM YYYY', 
      onSelect: function() { 
       _self.changeDuration(this.getMoment().toDate()) 
      }, 
      minDate: this.props.minDate 
     }); 

     this.picker = picker; 
    }, 


    render: function() { 

     if(this.picker){ 
      this.picker.setMinDate(this.props.minDate); 
     } 
     return (
      <input type="text" id={this.props.name} defaultValue={this.props.value}/> 
     ) 
    } 
}); 

だからこのケースでは、あなたはpickerと呼ばれるクラスのプロパティでピッカーを保存し、後であなたはそれがgotoDate法だ呼び出すことができますレンダリング。

+0

これは動作します。しかし、gotoDateは動作しませんでしたが、setMinDateは機能しました。私は編集を提案した。ありがとうたくさん.. – Abhilash

+1

@Abhilash私はそれを拒否した、私の悪い。そのようなメソッドのAPIセクションのプラグインページで見たように、無効な編集だと思っていました。 – Burimi

関連する問題