2017-09-21 8 views
1

したがって、テーブルの高さをビューポートの高さに等しくすることについて、別の質問で助けがありました。つまり、ユーザーが画面のサイズを変更した場合、テーブルの高さは画面の高さ全体を占めるようにオンザフライで調整されます。私の問題は今、これはReact Appであり、このjquery関数をReactに変換するのは苦労しています。動的ビューポートの高さのためのReactJSのJQuery関数

My機能は次のようになります。ここでは

$(document).ready(function() { 
    function setHeight() { 
    windowHeight = $(window).innerHeight(); 
    $('.dynamicHeight').css('height', windowHeight + 'px'); 
    }; 
    setHeight(); 

    $(window).resize(function() { 
    setHeight(); 
    }); 
}); 

が行動

を示すcodepenであり、ここで私が enter image description here

どのようにすることができますを行うにしようとしています何のスクリーンショットでありますこの関数をReactでビルドしますか?私はそれがいくつかの変更を必要とすると仮定しています。事前

NOTEで

ありがとう:これは私が作った別の質問のように見えるかもしれないが、それは重複しません。それは同じ問題に関連する全く異なる質問です。

答えて

3

コンポーネントのライフサイクルでは、componentDidMountメソッドを追加する必要があります。その方法では、単にあなたのコンポーネントを初期化するとき、あなたは(jQueryのを使用)、ビューポートの幅と高さに状態を設定リサイズハンドラが何であるか、これはありませんので、

import React, { Component } from 'react'; 

class MyComponent extends Component { 
    constructor(props){ 
     super(props); 
     this.state = { 
      width: $(window).width(), 
      height: $(window).height(), 
     } 
     this.resize = this.resize.bind(this); 
    } 
    resize(){ 
     this.setState(() => { 
      return { 
       width: $(window).width(), 
       height: $(window).height() 
      } 
     }); 
    } 
    componentDidMount(){ 
     window.addEventListener('resize', this.resize); 
    } 
    render(){ 
     return (
      <div> 
       <MyComponent width={this.state.width} height={this.state.height} /> 
      </div> 
     ) 
    } 
} 

を、追加します。次に、状態を更新するメソッドを定義し、コンポーネントがマウントされたときにresizeイベントリスナーをアタッチし、画面のサイズが変更されるたびにresizeメソッドを呼び出します。これにより、ビューポートの幅と高さが常に状態に含まれます。次に、その状態を小道具やブームとしてコンポーネントに渡すことによって、コンポーネントの幅と高さを定義することができます。スクリーンのサイズを変更するたびに、コンポーネントはそれに合っています。

質問がありましたらお知らせください。 (ライフサイクルイベントは必要なだけ頻繁に状態を更新しないかもしれません)私はちょうどそれをホイップしてテストしませんでしたが、理論的にはこれがまさにあなたが必要とするものです

編集:ちょっと考えて、コンポーネントのスタイルを変更したい場合は、スタイルオブジェクトを使用します。だから、子コンポーネントには、このような何か:

let style = { 
    width: this.props.width + 'px', 
    height: this.props.height + 'px' 
} 

そして、あなたはそのコンポーネントをレンダリング

<ChildComponent style={style} /> 
+0

を一般的な答えは私に多くの意味になります。あなたが正しいです、少し修正する必要があります。私は正確に何が失敗しているのかの兆候なしでいくつかのエラーを取得しています。 lol – LOTUSMS

+0

私は上記のコードをコピーアンドペーストしませんが、いくつかの問題があると確信していますが、それはあなたがしたいことの全体的要点です。それをテンプレートとして使用し、ニーズに合わせて再構築してください。助けが必要な場合は、私は助けてうれしい –

+0

const内にコンストラクタを追加することはできません。私がそれをクラスにすると、そのエラーは消えてコンストラクタを受け入れますが、ドル記号演算子を認識しません – LOTUSMS

関連する問題