ReactにおけるRefの相互利用の詳細な説明

ReactにおけるRefの相互利用の詳細な説明

1. まずRefとは何かを説明しましょう

Ref 転送は、ref をコンポーネントを介してその子の 1 つに自動的に渡す手法です。これは通常、ほとんどのアプリケーションのコンポーネントでは必要ありません。しかし、一部のコンポーネント、特に再利用可能なコンポーネント ライブラリには役立ちます。

Ref公式サイトの説明:ここをクリック

2. フックでのrefの使用

1. HTMLDomフックでのrefの使用

公式ウェブサイトで通常どおり使用してください。次に例を示します。

定数Fn = ()=>{
    定数 testRef = useRef(null);
    console.log('testRef',testRef.current); // 2 回レンダリングされます。1 回目は null を出力し、2 回目は <div>test</div> を出力します。
    戻る (
        <div ref={testRef}>テスト</div>
    )
}

2. フックと関数コンポーネントでのrefの使用

ここでは、関数コンポーネントにref属性を渡すだけです。

定数Fn = ()=>{
    定数 testRef = useRef(null);
    // テスト関数コンポーネントを定義します。const Test = ({ refs }) => <div ref={refs}>I am ReactDOM test</div>;
    console.log('testRef',testRef.current); // 2 回レンダリングされます。1 回目は null を出力し、2 回目は <div>I am ReactDOM test</div> となります。
    戻る (
        * ここで ref as prop の代わりに refs が使用されている理由は、ref は react によって特別に処理され、キー * と同様に react コンポーネントに props として渡されないためです。
         <テスト参照={testRef} /> 
    )
}

3. フック内のクラスコンポーネントでrefを使用する

ここでは、クラスコンポーネントのコールバックrefのuseRefオブジェクトに手動で値を割り当てるだけです。その他のコールバックrefについては、こちらを参照してください。

'react-dom' から ReactDom をインポートします。

定数Fn = ()=>{
    const testClassRef = useRef(null);
    // TestClassクラスコンポーネントを定義する class TestClass extends React.Component {
        与える() {
          戻る (
            <div> 要素
                私は TestClass コンポーネント テストです</div>
          )
        }
    }
    console.log('testClassRef',testClassRef.current); // 2 回レンダリングされ、1 回目は null を出力し、2 回目は <div>I am a TestClass component test</div> となります。
    戻る (
        * ここで ref as prop の代わりに refs が使用されている理由は、ref は react によって特別に処理され、キー * と同様に react コンポーネントに props として渡されないためです。
         <テストクラス 
             ref={el => {
                console.log('新しいレンダリング参照')
                testClassRef.current = ReactDom.findDOMNode(el);
             }} 
         /> 
    )
}

4. フック内でクラスと react-redux で ref を使用する

connect でラップされたクラスコンポーネントに遭遇した場合、最外層が react-redux Provider でラップされているため、実際の React コンポーネントに ref 属性を渡す必要があります。このとき、connect の forwardRef 属性に注意する必要があります。

'react-dom' から ReactDom をインポートします。
'react-redux' から connect をインポートします。

定数Fn = ()=>{
    const testClassRef = useRef(null);
    // TestClassクラスコンポーネントを定義する class TestClass extends React.Component {
        与える() {
          戻る (
            <div> 要素
                私は TestClass コンポーネント テストです</div>
          )
        }
    }
    //TestClass の connect でラップされたコンポーネントを定義します //forwardRef:true connect でラップされたコンポーネントに ref を props として渡すことができるように redux を設定します const TestClassConnect = connect(null, null, null, { forwardRef: true })(TestClass);
    
    console.log('testClassRef',testClassRef.current); // 2 回レンダリングされ、1 回目は null を出力し、2 回目は <div>I am a TestClass component test</div> となります。
    戻る (
        * ここで ref as prop の代わりに refs が使用されている理由は、ref は react によって特別に処理され、キー * と同様に react コンポーネントに props として渡されないためです。
         <テストクラス接続
            ref={el => {
              console.log('新しいレンダリング参照')
              testClassRef.current = ReactDom.findDOMNode(el);
            }}
          />
    )
}

以上がReactにおけるRefの相互利用についての詳しい説明です。ReactにおけるRefの相互利用についてさらに詳しく知りたい方は、123WORDPRESS.COMの関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • React forwardRefの使い方と注意点
  • Vue3 の組み合わせ API における setup、ref、reactive の完全な使用方法
  • Reactのref属性を深く理解する方法
  • React の 3 つの主要属性における Ref の使用に関する詳細な説明
  • ReactにおけるuseRefの具体的な使い方
  • React refの使用例
  • ReactでRefを使用する方法の詳細な説明
  • react-refetchの使い方の詳しい説明
  • Reactのrefのデモ例を2つ学ぶ
  • React で refs を使用するチュートリアル
  • Reactコンポーネントrefsの使用に関する詳細な説明
  • React Native での RefreshContorl プルダウン リフレッシュの使用

<<:  開発者がデータベースロックを詳細に理解する必要がある理由

>>:  Zabbix上のすべてのホストのIPとホスト名を取得する

推薦する

docker compose を使用してハーバープライベートウェアハウスをインストールする詳細なチュートリアル

概要港とは何ですか?英語の単語の意味は「港」です。 Harborはコンテナ(貨物)を保管するために使...

InnoDB のアーキテクチャと機能の詳細な説明 (InnoDB ストレージ エンジンの読書メモの要約)

背景スレッド•マスタースレッドコア バックグラウンド スレッドは主に、バッファー プール データをデ...

CSS3はトランジション効果を実現するためにtransitionプロパティを使用する。

物件の詳細な説明transition 属性の目的は、一部の CSS プロパティ (背景など) をスム...

MySQL テーブルパーティションの使用法と基本原理の詳細な説明

目次パーティションテーブルとはパーティションテーブルの適用シナリオパーティションテーブルの制限パーテ...

Centos7 でスーパーバイザ デーモンをインストールして設定する方法

初心者は自分で録音しましょう1. スーパーバイザーをインストールします。 Supervisor は ...

フレックスとポジションの互換性の詳細な説明マイニングノート

今日は、すべてのブラウザ (主に IE 9 以上と Chrome) と互換性のある自分のホームページ...

MySQL truncate table ステートメントの使用

Truncate table ステートメントは、テーブル内のすべてのデータを削除/切り捨てるために使...

現在使用されている設定ファイル my.cnf を表示する mysql メソッド (推奨)

my.cnfは、MySQL の起動時に読み込まれる設定ファイルです。通常は MySQL インストー...

シェルスクリプトを使用したMySQLデータベースの自動バックアップ

シェルスクリプトを使用したMySQLデータベースの自動バックアップデータベースを頻繁にバックアップす...

Linux ネットワーク システムの紹介

目次ネットワーク情報ホスト名を変更するDNSドメイン名解決ネットワーク関連コマンドファイアウォール暗...

JavaScriptで配列かどうかを判断するためのさまざまな方法のまとめ

目次序文配列.isArrayコンストラクタインスタンスプロトタイプオブジェクト.プロトタイプ.toS...

webpackコード断片化の実装

目次背景コモンズチャンクプラグイン分割チャンク構成リソースを非同期に読み込む要約する背景高性能なアプ...

Vueはカスタムツリーコンポーネントを再帰的に実装します

この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...

MySQL エラー: 接続数が多すぎる場合の解決策

MySQLデータベースの接続が多すぎますこのエラーは明らかに、mysql_connect の後に m...

HTML+CSS ボックスモデルの例 (円、半円など) 「border-radius」はシンプルで使いやすい

多くの友人は、フロントエンドを学習するときに、ボックス モデルがデフォルトで正方形であることに気付き...