ホームページ ウェブフロントエンド jsチュートリアル フックを使用して React の要素の配列に対する複数の参照を管理するにはどうすればよいですか?

フックを使用して React の要素の配列に対する複数の参照を管理するにはどうすればよいですか?

Nov 03, 2024 am 02:23 AM

How to manage multiple refs for an array of elements in React using hooks?

フックを使用した要素の配列の複数の参照

React では、useRef フックを使用して開発者が要素への DOM 参照を管理できます。通常、ref は単一の要素にアクセスするために使用されます。ただし、このアプローチは要素の配列には適していない可能性があります。

フックを使用して要素の配列の複数の参照を操作するには、少し異なるアプローチが必要です。次の状況を考えてみましょう:

<code class="javascript">const { useRef, useState, useEffect } = React;

const App = () =&gt; {
  const elRef = useRef();
  const [elWidth, setElWidth] = useState();

  useEffect(() =&gt; {
    setElWidth(elRef.current.offsetWidth);
  }, []);

  return (
    &lt;div&gt;
      {[1, 2, 3].map(el =&gt; (
        &lt;div ref={elRef} style={{ width: `${el * 100}px` }}&gt;
          Width is: {elWidth}
        &lt;/div&gt;
      ))}
    &lt;/div&gt;
  );
};</code>
ログイン後にコピー

この例では、配列内の各要素に同じ elRef を渡すだけで複数の ref を作成しようとします。ただし、このアプローチでは最後の要素のみが参照されます。

この問題を解決するには、次の手法を活用できます。

<code class="javascript">const App = props =&gt; {
  const itemsRef = useRef([]);
  // you can access the elements with itemsRef.current[n]

  useEffect(() =&gt; {
    itemsRef.current = itemsRef.current.slice(0, props.items.length);
  }, [props.items]);

  return props.items.map((item, i) =&gt; (
    &lt;div
      key={i}
      ref={el =&gt; (itemsRef.current[i] = el)}
      style={{ width: `${(i + 1) * 100}px` }}
    &gt;
      ...
    &lt;/div&gt;
  ));
};</code>
ログイン後にコピー

この改善されたソリューションでは、itemsRef を使用します。参照を保持する配列。配列を空の配列で初期化します。 useEffect では、props.items 配列の長さと一致するように itemsRef 配列を更新します。これにより、配列内の各項目に対応する参照が確実に存在します。

これで、itemsRef.current[n] を使用して個々の要素の参照にアクセスできるようになります。ここで、n は配列内の要素のインデックスです。

以上がフックを使用して React の要素の配列に対する複数の参照を管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptの文字列文字を交換します JavaScriptの文字列文字を交換します Mar 11, 2025 am 12:07 AM

JavaScriptの文字列文字を交換します

jQueryは要素のパディング/マージンを取得します jQueryは要素のパディング/マージンを取得します Mar 01, 2025 am 08:53 AM

jQueryは要素のパディング/マージンを取得します

jQuery日付が有効かどうかを確認します jQuery日付が有効かどうかを確認します Mar 01, 2025 am 08:51 AM

jQuery日付が有効かどうかを確認します

10 jQuery Accordionsタブ 10 jQuery Accordionsタブ Mar 01, 2025 am 01:34 AM

10 jQuery Accordionsタブ

10 jqueryプラグインをチェックする価値があります 10 jqueryプラグインをチェックする価値があります Mar 01, 2025 am 01:29 AM

10 jqueryプラグインをチェックする価値があります

ノードとHTTPコンソールを使用したHTTPデバッグ ノードとHTTPコンソールを使用したHTTPデバッグ Mar 01, 2025 am 01:37 AM

ノードとHTTPコンソールを使用したHTTPデバッグ

カスタムGoogle検索APIセットアップチュートリアル カスタムGoogle検索APIセットアップチュートリアル Mar 04, 2025 am 01:06 AM

カスタムGoogle検索APIセットアップチュートリアル

jQueryはscrollbarをdivに追加します jQueryはscrollbarをdivに追加します Mar 01, 2025 am 01:30 AM

jQueryはscrollbarをdivに追加します

See all articles