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とホスト名を取得する

推薦する

CentOS8 ネットワークカード設定ファイル

1. はじめにCentOS8 システムの更新、新しいバージョンは人々に非常に快適に感じさせます。 こ...

vue3.0 でカルーセル コンポーネントをカプセル化する手順

目次1: カプセル化の考え方2. 包装工程3: ドットインジケーター4: 左と右のインジケーター5:...

独自の YUM リポジトリを作成する手順

簡単に言うと、ウェアハウスとして使用される仮想マシンの IP は 192.168.149.129 で...

Linux コマンドラインで電卓を使用する 5 つのコマンド

みなさんこんにちは。私は梁旭です。 Linux を使用するときに、計算を行う必要がある場合があり、そ...

追加、削除、変更、クエリを実行するための JS 操作オブジェクト配列のサンプルコード

1. はじめに最近、私は友人が JSON 配列を追加、削除、変更するための簡単なページを作成するのを...

モバイルページで縦画面を強制する方法

最近、仕事でモバイルページを作成しました。もともと特別なことではありませんでしたが、非常に奇妙に感じ...

Workermanはmysql接続プールのサンプルコードを書きます

まず、接続プールを使用する理由と、接続プールによってどのような問題が解決できるかを理解する必要があり...

vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

vue2 プロジェクト開発の経験があれば、$refs に精通しているでしょう。 vue3 の急激なア...

MySQLの文字セットを変更する方法

1. MySQLの文字セットを確認する '%char%' のような変数を表示します。...

Win10にnginxをインストールして設定するプロセス

1. はじめにNginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プロキ...

MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します

仕事上の理由により、完全なオンライン化(​​つまり、すべてのデータがオンラインで完了し、インポートや...

MySQLデータベースのパスワードを忘れた場合の解決策

先ほど MySQL パスワードを設定したのに、外食したり荷物を受け取ったりするときにパスワードを忘れ...

Dockerコンテナの状態変換の実装

Dockerコンテナの状態遷移図2度目の実戦 [root@localhost ~]# docker ...

マークアップ言語 - テキストの CSS スタイルを指定する

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...