React 要素の幅を取得する

Shubham Vora 2023年6月21日
React 要素の幅を取得する

この記事では、React で要素の幅を取得する方法を学習します。 多くの場合、要素の幅を取得して、幅またはその他の寸法に従って操作を実行する必要があります。 したがって、ここでは useRef() React フックを使用して、特定の要素のサイズを取得します。

useRef() React フックを使用して要素の幅を取得する

React で useRef() の働きをゼロから理解してみましょう。

まず、標準の JavaScript で要素の幅を取得する必要があるかどうかを検討してください。 職業はなんですか? 答えは、まず DOM 要素にアクセスし、その DOM 要素の width プロパティを取得することです。

ここでは、useRef() を使用して、React DOM 要素への参照を作成します。 ユーザーは useRef() フックを使用して、以下のような DOM 要素の参照を取得できます。

const ref = useRef(Initial DOM element);
return (
    <div ref={ref} >
    </div>
);

useRef() フックには current プロパティが含まれており、それを使用して参照先の要素にアクセスできます。 参照要素を取得したら、offsetWidth を使用して特定の参照要素の幅を取得できます。

let width = ref.current.offsetWidth;

以下の例では、HTML の <div> 要素を作成し、ref 変数を使用して参照しています。 最初に、div の heightwidth を 200px に設定します。

さらに、Change Div Size ボタンを追加しました。ユーザーがそれをクリックすると、changeDivSize() 関数が実行されます。

changeDivSize() 関数は、100 から 300 の間のランダムな値を生成し、それに応じて div 要素のサイズを変更します。 その後、ref.current.offsetWidth を使用して、div 要素の新しい幅を取得しました。

ここでは、setTimeout() 関数を使用して、div 要素の新しい幅を取得するための遅延を追加しました。

コード例:

import { useState, useRef } from "react";
function App() {
  //  creating the variables for the div width and height
  let [divWidth, setDivWidth] = useState("200px");
  let [divheight, setDivheight] = useState("200px");
  // variable to store the element's width from `ref`.
  let [widthByRef, setWidthByRef] = useState(200);
  // It is used to get the reference of any component or element
  const ref = useRef(null);
  // whenever user clicks on Change Div size button, ChangeDivSize() function will be called.
  function changeDivSize() {
    // get a random number between 100 and 300;
    let random = 100 + Math.random() * (300 - 100);
    //  convert the random number to a string with pixels
    random = random + "px";
    // change the height and width of the div element.
    setDivWidth(random);
    setDivheight(random);
    // get the width of the div element using ref.
    // reason to add the setTimeout() function is that we want to get the width of the Div once it is updated in the DOM;
    // Otherwise, it returns the old width.
    setTimeout(() => {
      setWidthByRef(ref.current ? ref.current.offsetWidth : 0);
    }, 100);
  }
  return (
    <div>
      {/* showing width which we got using ref */}
      <h3>Width of Element is : {widthByRef}</h3>
      {/* resizable div element */}
      <div
        ref={ref}
        style={{ backgroundColor: "red", height: divheight, width: divWidth }}
      >
        Click on the below buttons to resize the div.
      </div>
      {/* button to resize the div element */}
      <button style={{ marginTop: "20px" }} onClick={changeDivSize}>
        Change Div Size
      </button>
    </div>
  );
}
export default App;

出力:

react 要素の幅を取得

上記の出力では、ボタンをクリックすると、div のサイズが変更され、Web ページに新しい幅が表示されることがわかります。

著者: Shubham Vora
Shubham Vora avatar Shubham Vora avatar

Shubham is a software developer interested in learning and writing about various technologies. He loves to help people by sharing vast knowledge about modern technologies via different platforms such as the DelftStack.com website.

LinkedIn GitHub

関連記事 - React Element