2017-04-05 2 views
2

windowオブジェクトが合成されたかどうかに反応するかどうかは疑問でした。React合成の `window`オブジェクトはありますか?

されていない場合、私は、私は、ビューポートの幅と高さを決定するために、次のコードが必要になり想定しています

const w = window, 
    d = document, 
    documentElement = d.documentElement, 
    body = d.getElementsByTagName('body')[0], 
    width = w.innerWidth || documentElement.clientWidth || body.clientWidth, 
    height = w.innerHeight || documentElement.clientHeight || body.clientHeight 

答えて

6

windowオブジェクトは、通常のDOMオブジェクトです。

キャッチは、コンポーネントがマウントされた後にのみ利用できるということです。

componentDidMount() { 
    const w = window, 
    d = document, 
    documentElement = d.documentElement, 
    body = d.getElementsByTagName('body')[0], 
    width = w.innerWidth || documentElement.clientWidth || body.clientWidth, 
    height = w.innerHeight || documentElement.clientHeight || body.clientHeight 
} 

https://facebook.github.io/react/docs/react-component.html#componentdidmount

更新:

DOM負荷が前にリアクト場合は、windowオブジェクトがcomponentWillMountで利用可能です。文書の<head>にReactをロードしていない限り、私はcomponentWillMountを使用しても問題ないと思います。

注:レンダリングしようとしている実際のコンポーネントはまだ存在しませんが、windowが存在する可能性があります。

+1

メソッド名を変更したい場合は、小さな 'c'で始まると思います。 –

+0

@ArchimedesTrajanoおっと。更新しました。 –

+0

また、マウントされていることに気づいたが、それは矛盾するhttp://stackoverflow.com/questions/19014250/reactjs-rerender-on-browser-resize –

0

Reactのウィンドウオブジェクトへのアクセスは、他の場所と同じです。 JavaScriptが実行される前に存在します。テストとして、ロケーションバーにabout:blankと入力し、コンソールを開き、 'window'と入力します。それはページに他のJavaScriptがなくてもそこにあります。

関連する問題