React における ref の一般的な使用法の概要

React における ref の一般的な使用法の概要

Refsとは何か

Ref は、レンダリング メソッドで作成された DOM ノードまたは React 要素にアクセスできるようにする方法を提供します。
Ref 転送は、ref をコンポーネントを通じてその子に自動的に渡す手法です。 DOM ノードまたは React 要素インスタンスを取得するためによく使用されるツール。 React の Ref は、レンダリング メソッドで作成された DOM ノードまたは React 要素にユーザーがアクセスできるようにする方法を提供します。

参照

Ref 転送は、特定のコンポーネントが ref を受信して​​それを子コンポーネントに渡す (つまり、「転送する」) ことを可能にするオプションの機能です。

デフォルトでは、関数コンポーネントにはインスタンスがないため、ref 属性は使用できません。

1. 文字列参照

文字列参照にいくつかの問題があるため、このメソッドを使用することはお勧めしません。これは非推奨であり、将来のバージョンで削除される可能性があります。

「react」からReactをインポートします。
// 親コンポーネントのエクスポート デフォルトクラス StringRef は React.PureComponent を拡張します {
  コンポーネントマウント() {
    console.log("stringRefDom:", this.refs.stringRefDom);
    console.log("stringRefComp:", this.refs.stringRefComp);
  }
  与える() {
    戻る (
      <div>
        ネイティブ コンポーネントの使用方法*/
        <div ref={"stringRefDom"}>文字列参照Dom</div>
        クラスコンポーネントの使用方法*/
        <StringRefComp ref={"stringRefComp"} />
      </div>
    );
  }
}
//クラスコンポーネントクラスStringRefCompはReact.PureComponentを拡張します{
  与える() {
    <div>StringRefComp</div> を返します。
  }
}

2. コールバック参照

  • ref コールバック関数がインライン関数として定義されている場合、更新プロセス中に 2 回実行されます。
  • 1回目はパラメータがnullで、2回目はパラメータDOM要素が渡されます
  • これは、レンダリングごとに関数の新しいインスタンスが作成され、React が古い参照をクリアして新しい参照を設定するためです。
  • 上記の問題は、ref のコールバック関数をクラスのバインドされた関数として定義することで回避できます。
  • しかしほとんどの場合それは無関係です
「react」からReactをインポートします。
// 親コンポーネントのエクスポート デフォルトクラス CallbackRef は React.PureComponent を拡張します {
  コンストラクタ(props) {
    スーパー(小道具);
    this.callbackRefDom = null;
    this.callbackRefComp = null;
  }
  コンポーネントマウント() {
    console.log("コールバックRefDom:", this.callbackRefDom);
    console.log("コールバックRefComp:", this.callbackRefComp);
  }
  //コールバック関数 setCallbackRefDom = (ref) => {
    this.callbackRefDom = ref;
  };
  setCallbackRefComp = (ref) => {
    this.callbackRefComp = ref;
  };
  //コールバック関数render() {
    戻る (
      <div>
        <div ref={this.setCallbackRefDom}>コールバックRefDom</div>
        <CallbackRefComp ref={this.setCallbackRefComp} />
      </div>
    );
  }
}

//クラスコンポーネントクラスCallbackRefCompはReact.PureComponentを拡張します{
  与える() {
    <div>callbackRefComp</div> を返します。
  }
}

React.createRef()

  • React 16.3が導入されました
  • React の以前のバージョンでは、コールバック ref が推奨されています。
「react」からReactをインポートします。
// 親コンポーネントのエクスポート デフォルトクラス CreateRef は React.PureComponent を拡張します {
  コンストラクタ(props) {
    スーパー(小道具);
    React のインスタンスを作成します。
    this.createRefComp = React.createRef();
  }
  コンポーネントマウント() {
    console.log("createRefDom:", this.createRefDom.current);
    console.log("createRefComp:", this.createRefComp.current);
  }
  与える() {
    戻る (
      <div>
        <div ref={this.createRefDom}>RefDom を作成します</div>
        <CreateRefComp ref={this.createRefComp} />
      </div>
    );
  }
}
//クラスコンポーネントクラスCreateRefCompはReact.PureComponentを拡張します{
  与える() {
    <div>CreateRefComp</div> を返します。
  }
}

4. 参照

  • フックはReact 16.8の新機能です
React をインポートし、{useEffect} を "react" から取得します。
// 親コンポーネント const UseRef = React.memo(() => {
  // // 以下も使用できます // const createRefDom = React.createRef();
  // const createRefComp = React.createRef();
  React のインスタンスを 1 つ作成します。
  React のインスタンスを作成します。
  使用効果(() => {
    console.log("useRefDom:", createRefDom.current);
    console.log("useRefComp:", createRefComp.current);
  }, []);
  戻る (
    <div>
      <div ref={createRefDom}>useRefDom</div>
      <UseRefComp ref={createRefComp} />
    </div>
  );
});

デフォルトのUseRefをエクスポートします。

//クラスコンポーネントクラスUseRefCompはReact.PureComponentを拡張します{
  与える() {
    <div>useRefComp</div> を返します。
  }
}

5. 参照と関数コンポーネント

  • デフォルトでは、関数コンポーネントにはインスタンスがないため、ref 属性は使用できません。
  • 関数コンポーネントでrefを使用する場合は、forwardRefを使用できます(useImperativeHandleと組み合わせて使用​​できます)。
  • または、コンポーネントをクラス コンポーネントに変換します。
「react」から React をインポートし、{useEffect、useImperativeHandle} を追加します。

// 親コンポーネント const ForwardRef = React.memo(() => {
  React のインスタンスを作成します。
  React の RefCompMethod を const として定義します。

  使用効果(() => {
    console.log("useRefComp:", createRefComp.current);
    console.log("createRefCompMethod:", createRefCompMethod.current);
    createRefComp.current.reload();
  }, []);
  戻る (
    <div>
      <ForwardRefFunc ref={createRefComp} />
    </div>
  );
});

デフォルトの ForwardRef をエクスポートします。

const RefFunc = React.forwardRef((props, ref) => {
  const [name, setName] = React.useState(null);
  定数リロード = () => {
    console.log("リロード");
    タイムアウトを設定する(() => {
      名前を設定します("ForwardRefFunc");
    }, 3000);
  };
  //useImperativeHandle を使用すると、refuseImperativeHandle(ref, () => { を使用するときに親コンポーネントに公開されるインスタンス値をカスタマイズできます。
    戻る {
      リロード: リロード、
    };
  });
  <div ref={ref}>ForwardRefFunc {name}</div> を返します。
});
React の RefFunc を実装します。

forwardRef と useImperativeHandle の最終的な目標は、呼び出し可能なオブジェクトを参照に提供することです。

  • Ref と DOM
  • フォワード参照
  • 命令型ハンドルを使用する

要約する

これで、React での ref の一般的な使用法に関するこの記事は終了です。React での ref の使用法の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • React の 3 つの主要属性における Ref の使用に関する詳細な説明
  • React refsの詳細な紹介
  • React で refs を使用するチュートリアル
  • Reactコンポーネントrefsの使用に関する詳細な説明
  • React の Refs 属性をご存知ですか?

<<:  仮想マシンのディスクサイズを拡張する方法

>>:  MySQL 8.0 DDLアトミック機能と実装原則

推薦する

CentOS 7 での mysql 5.7 のインストール チュートリアル

1. 公式MySQL Yumリポジトリをダウンロードしてインストールする 実行ファイル: mysql...

MAC で MySQL の初期パスワードを変更する方法

問題の説明: Macを購入し、初めてMySQLをインストールしました。初期パスワードが分かりません。...

スライディングカルーセル効果を実現する js

この記事では、スライディングカルーセル効果を実現するためのjsの具体的なコードを参考までに共有します...

MySQL 面接の質問: ハッシュ インデックスの設定方法

B-Tree インデックスに加えて、MySQL は次のインデックスも提供します。ハッシュインデックス...

jsでシンプルなパズルゲームを実現する

この記事では、簡単なパズルゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な...

vue-admin-template 動的ルーティング実装例

ログインを提供し、ユーザー情報データインターフェースを取得するapi/user.js内 '@...

MySQL レプリケーションの利点と原則を詳しく説明します

レプリケーションとは、マスター データベースの DDL および DML 操作をバイナリ ログを介して...

node.js でマルチコア CPU を最大限に活用する方法

目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...

MySQLでカーソルを宣言する方法

MySQL でカーソルを宣言する方法: 1. 変数とカーソルを宣言する 結果をvarchar(300...

入力ボックスのカーソルサイズの表示が一貫していない問題の解決方法

入力ボックス内のカーソルのサイズが一定ではありませんIE7とChromeの違いは非常に明白ですまず、...

新しい要素を作成する3つの方法のまとめ

1つ目: テキスト/HTML経由var txt1="<h1>テキスト。<...

MySQL 継続的集計の原理と使用法の分析

この記事では、例を使用して、MySQL の継続的な集計の原理と使用方法を説明します。ご参考までに、詳...

JavaScriptはすべての選択と選択解除の操作を実装します

この記事では、JavaScriptで全選択と全選択解除の操作を実装するための具体的なコードを参考まで...

Linux 環境変数とプロセス アドレス空間の概要

目次Linux 環境変数とプロセスアドレス空間コードを通じて環境変数を取得するプロセスアドレス空間な...

MySQL 8.x msi バージョンのインストール チュートリアル (画像とテキスト付き)

1. MySQLをダウンロードする公式サイトのダウンロードアドレス https://dev.mys...