タイトルにある通り、React で画面サイズが変わった事をリアルタイムで検知し、かつ画面の幅・高さをその都度取得する方法についてです。
参考にさせていただいた…というか、コードをまるっと使用させていただいたサイトはこちら。
Reactで画面サイズを取得するHooks | RyotArchLog
https://ryotarch.com/javascript/react/get-window-size-with-react-hooks/
まさに、わたしが実装したいと思ったコードそのものでした。
サンプルコードは下記のとおりです。
import React, { useState, useEffect } from 'react';
const Example = props => {
const getWindowDimensions = () => {
const { innerWidth: width, innerHeight: height } = window;
return {
width,
height
};
}
const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());
useEffect(() => {
const onResize = () => {
setWindowDimensions(getWindowDimensions());
}
window.addEventListener('resize', onResize);
return () => window.removeEventListener('resize', onResize);
}, []);
return (
<div>
......
</div>
);
}
export default Example;
私はコンポーネント内に実装しました。
上記コードでは、画面サイズが変わるたびに state の windowDimensions にリアルタイムで反映され、幅、高さの値はそれぞれ windowDimensions.width と windowDimensions.height で取得できます。
こちらを使えば、例えば画面の幅が 800px 以下になったら、指定した要素の縦幅を小さくする等の処理を行うことができます。
私の場合は、画面のサイズによって PC 用のステッパーとモバイル用のステッパーを切り替えるという処理を行っています。
以上、React で画面のサイズの変更をリアルタイムで検知し、幅・高さをその都度取得する方法についてでした。
ご参考になれば幸いです。