2017-09-01 15 views
1

TypeErrorのエラーが発生しました:domノードのoffsetHeightを取得しようとすると、定義されていない のプロパティ 'offsetHeight'を読み取ることができません。DOMノードを取得するcomponentDidMount

componentDidMount() { 
     setTimeout(function(){ 
      console.log(this.contentBody.offsetHeight) 
     },1000) 
    } 

これはrefがまだ設定されていない私の非同期の原因と思われます。私のレンダリング方法私はここに非Ajaxのデモhttps://codesandbox.io/s/j46o2656vyを作成しようとしましたし、それが働いていた。このよう

<div ref={elem => this.contentBody = elem} className="content-body" dangerouslySetInnerHTML={createMarkupFromReferenceContent()} /> 

を見て。だからこそ私は上記のsetTimeoutハックを試みるが運はない。任意の手掛かりをどのようにこれを解決するには?

+0

その[コールバックの内側に正しい\ 'この\'を利用するには?](HTTPSのsetTimeout関数 –

+1

可能な二重に結合問題: //stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback) –

答えて

0

thisをsetTimeoutコールバック関数にバインドする必要があります。あなたがコールバック関数ではなく、あなたのオブジェクトにコールバック関数をthisポイントを、それを使用する場合、最も近い範囲に

componentDidMount() { 
 
     setTimeout(function(){ 
 
      console.log(this.contentBody.offsetHeight) 
 
     },1000).bind(this); 
 
    }

0

this reffers:このように。

これは矢印機能用いて固定することができEcmaScript2015で

componentDidMount() { 
    setTimeout(()=>{ 
     console.log(this.contentBody.offsetHeight) 
    },1000) 
} 

をしかし、この構文は古いブラウザではサポートされていません(特にIE)

しかし、あなたはクロスブラウザのサポートが必要な場合ちょうど変数を使用します。

componentDidMount() { 
    var self = this; 
    setTimeout(function(){ 
     console.log(self.contentBody.offsetHeight); 
    },1000) 
} 
関連する問題