React でウィンドウの幅を取得する

Irakli Tchigladze 2023年6月21日
React でウィンドウの幅を取得する

この記事では、React でウィンドウ幅の値を見つける方法を紹介します。

応答性は、最新の Web 開発の基盤の 1つです。 最近では、ラップトップ、デスクトップ、携帯電話、さらにはゲーム機など、さまざまなデバイスから Web サイトを閲覧しています。

応答性とは、ユーザーのニーズに対応し、ユーザーのデバイスに基づいてアプリケーションのレイアウトを調整することを意味します。

React でウィンドウの幅を取得する

あらゆるデバイスの最も重要な機能は、その画面サイズです。 React アプリケーションでは、画面サイズをピクセル単位で表す数値に簡単にアクセスできます。

次に、この情報を使用して、React アプリの外観と機能を変更できます。 画面サイズ (ピクセル単位) を使用して、クラスを条件付きで適用できます。

たとえば、ウィンドウの幅が 600 ピクセル未満の場合はパディングを 10 ピクセルにし、600 ピクセルを超える場合はパディングを 20 ピクセルにします。 つまり、画面の幅を使用して、コンテンツがページにどの程度収まるかを確認できます。

ウィンドウ幅の値をコンポーネントの状態に格納できます。 実行時にウィンドウの幅が変更された場合、状態値を更新された幅に設定するように React アプリケーションを設定できます。

React クラス コンポーネントでウィンドウ幅を取得する

クラス コンポーネントでは、.addEventListener() メソッドを使用して、window オブジェクト自体の resize イベントをリッスンする必要があります。 ユーザーがウィンドウの幅を変更するたびに、イベント ハンドラーが実行され、ウィンドウの幅の値が更新されます。

コード:

constructor(props) {
    super(props);
    this.state = { windowWidth: 0, windowHeight: 0 };
    this.handleResize = this.handleResize.bind(this);
}

componentDidMount() {
    this.handleResize();
    window.addEventListener('resize', this.handleResize);
}

componentWillUnmount() {
    window.removeEventListener('resize', this.handleResize);
}

handleResize() {
    this.setState({ windowWidth: window.innerWidth, windowHeight: window.innerHeight });
}

まず、状態を開始し、windowWidth プロパティと windowHeight プロパティをデフォルト値の 0 に設定することから始めます。また、handleResize メソッドもバインドします。

componentDidMount() ライフサイクル メソッドで、初めて handleResize() メソッドを呼び出します。 これにより、ページの初期サイズと resize イベントのハンドラーが設定されます。

componentWillUnmount ライフサイクル メソッドでは、イベント リスナーを削除します。

最後に、window オブジェクトの innerWidth プロパティを使用して、ウィンドウの幅にアクセスします。 innerHeight プロパティを使用して高さを取得します。

setState() メソッドを使用して、クラス コンポーネントの状態を更新し、状態プロパティをこれらのディメンションに設定します。

React 関数コンポーネントでウィンドウ幅を取得する

関数コンポーネントでは、カスタム useWindowDimensions フックを作成し、それを使用してウィンドウの幅と高さの値を簡単に取得できます。

useWindowDimensions フックの定義を見てみましょう。

コード:

import { useState, useEffect } from 'react';

function getWindowDimensions() {
    const width = window.innerWidth
    const height = window.innerHeight
    return {
        width,
        height
    };
}

export default function useWindowDimensions() {
    const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());
    useEffect(() => {
        function handleResize() {
            setWindowDimensions(getWindowDimensions());
        }
        window.addEventListener('resize', handleResize);
        return () => window.removeEventListener('resize', handleResize);
    }, []);

    return windowDimensions;
}

次に、コア React ライブラリからインポートされた useEffect フックを使用して、ライフサイクル コンポーネントで行ったのと同じタスクを実行します。イベント リスナーを追加して一度実行すると、コンポーネントがマウントされたときに初期ウィンドウのサイズが取得され、イベント リスナーが削除されたときにイベント リスナーが削除されます。 アンマウントします。

セットアップが完了すると、useWindowDimensions フックを他のコンポーネント内にインポートし、それを使用してウィンドウの幅と高さを簡単に取得できます。

コード:

const App = () => {
    const { height, width } = useWindowDimensions();
    return (
        <div>
            The width of your window: {width}
            The height of your window: {height}
        </div>
    );
}
Irakli Tchigladze avatar Irakli Tchigladze avatar

Irakli is a writer who loves computers and helping people solve their technical problems. He lives in Georgia and enjoys spending time with animals.

LinkedIn