2017-06-14 17 views
0

私は過去にbootstrap-datepickerを使用しました。これは月のカレンダーを静的(インライン)にするオプションを持っています(here)。jqueryに依存するライブラリを反応させてロードする

私は今、Reactを使っています(それはかなり新しくなっています)。また、再度日付選択ツールが必要です。私は使用することを決めましたreact-bootstrap-date-pickerしかし、react-bootstrap-datepickerにはインラインオプションがありません。

私はreact-bootstrap-datepickerのcssをひどくハックしたくありません。反応したbootstrap-datepickerのようなjQuery依存ライブラリをロードする最も良い方法は何ですか?これは悪い習慣でしょうか?

ここには、bootstrap-datepickerモジュールをロードするためのJS(jQuery)/ HTMLコードがあります。

<div id="datepicker" data-date="12/03/2012"></div> 
<input type="hidden" id="my_hidden_input"> 

$('#datepicker').datepicker(); 

$('#datepicker').on('changeDate', function() { 

    $('#my_hidden_input').val(
     $('#datepicker').datepicker('getFormattedDate') 
    ); 

}); 

UPDATE:これは、ブートストラップカレンダーをレンダリングするという点でワークアウトをした一方で

だから、私は#のmy_hidden_​​inputの値が更新されたときに起動するイベントを取得することはできませんよ。私は、render()関数のdivの値の変化を検出するonChangeイベントを追加しました。

<div id="datepicker"></div> 

    <div id="#my_hidden_input" onChange={this.handleDate}> 

</div> 

ここで、handleDate()関数は単にconsole.log(1)を起動します。

+0

チェックアウト '反応し、ブートストラップ・daterangepicker'(HTTPS:/ /www.npmjs.com/package/react-bootstrap-daterangepicker)代わりに、私はそれがあなたが探していたものだと思います。ブートストラップdaterangepicker用のReactコンポーネントラッパーを作成し、元のものと同じオプションすべてにアクセスできるようにします。 –

+0

ここでは、日付選択ツールにカスタムクラスやスタイルを追加する方法の例を開いて問題が発生しました。 https://github.com/skratchdot/react-bootstrap-daterangepicker/issues/141 –

答えて

3

jQueryプラグインを初期化する「リアクション」方法は、ライフサイクルメソッドcomponentDidMountで行います。

componentDidMount(){ 
    $('#datepicker').datepicker(); 

    $('#datepicker').on('changeDate', function() { 

     $('#my_hidden_input').val(
      $('#datepicker').datepicker('getFormattedDate') 
     ); 

    }); 
} 

更新:何@klaasman追加破壊したりアンマウントプラグインについて述べました。

componentWillUnmount(){ 
    $('#datepicker').destroy(); 
} 

アップデート2:あなたはhandleDate関数を呼び出すために、イベントを設定していなかったので、onChangeイベントが発射されていないcomponentWillUnmountライフサイクルメソッドを使用します。ここでは、無名関数に変更イベントを設定します。

$('#datepicker').on('changeDate', function() { 

    $('#my_hidden_input').val(
     $('#datepicker').datepicker('getFormattedDate') 
    ); 

}); 

を代わりに、あなたがそうのようなあなたのhandleDate機能を提供する必要があります。

$('#datepicker').on('changeDate', this.handleDate); 
+0

私は、コードからより動的な動作が必要な場合は、ライフサイクルメソッドのcomponentWillUpdate()に入るコードが時々必要であることに気付きました。 – FujiRoyale

+0

私が完全にそれを逃していない限り、ドキュメントを見てからreact-bootstrap-daterangepickerは残念ながらインラインオプションを持っていません。 componentDidMount()を使用してjqueryモジュールソリューションを選択しました。 – NutellaAddict

+2

アンマウント時にそのようなプラグインを破壊することを忘れないことも重要です。ライブラリはこれをサポートする必要があります。この場合、bootstrap-datepickerは 'をサポートしています。destroy() '-methodを実行すると、' $( '#datepicker')のような結果になります。data( "DateTimePicker")。destroy() ' – klaasman

関連する問題