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アトミック機能と実装原則

推薦する

html+css3で実装されたログインインターフェース

成果を達成するまずHTMLを使って基本的なフレームワークを構築します <本文> <...

役に立つメタ設定方法(必読)

<meta name="viewport" content="...

Linux ネットワークプログラミング機能の簡単な分析

目次1.ソケットを作成する2. ソケットをバインドする3. 聞き手を作る。聞く4. 接続が受け入れら...

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...

ろうそくを溶かす(水滴)サンプルコードを実現する純粋な CSS

成果を達成する実装のアイデアフィルターのコントラストとぼかしを利用して溶ける効果を実現します。親要素...

CentOS 6 は Docker を使用して Zookeeper 操作例を展開します

この記事では、Docker を使用して Centos6 に Zookeeper をデプロイする方法に...

Vue2.0+ElementUI+PageHelperで実装されたテーブルページング機能

序文最近、いくつかのフロントエンド プロジェクトに取り組んでおり、ページにいくつかのテーブルを表示す...

指定フィールドによるMySQLカスタムリストのソートの実装

問題の説明ご存知のとおり、MySQL でフィールドを昇順に並べ替える SQL は次のとおりです (i...

SQL実行ステップの詳細な分析

SQL実行ステップの詳細な分析まず、ステートメントが実行される順序を見てみましょう。 (8)選択する...

DockerイントラネットはDNSを構築し、ip:port操作の代わりにドメイン名アクセスを使用します

たとえば、イントラネットに Jenkins サーバーがある場合、そのサーバーにアクセスするには、その...

Tomcat で server.xml と content.xml を変更した後の自動復元の問題の解決方法

設定ファイルを server.xml と content.xml に書き込みます。サーバーを再起動す...

DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

目次1. はじめに2. 環境整備1. 基本環境3.Mysqlマスタースレーブ構成をインストールする1...

Ant Design Pro ログイン機能にグラフィック検証コード コンポーネントを統合する方法

序文:この記事では、Ant Design Proログイン機能にグラフィック検証コードコンポーネントを...

MySQL並列レプリケーションの簡単な説明

1. 並列レプリケーションの背景まず、並列レプリケーションの概念はなぜ存在するのでしょうか? 1. ...

HTML の div、td、p およびその他のコンテナーでの強制改行と非改行の実装

1. 改行を強制せず、省略記号で終了します。コードをコピーコードは次のとおりです。 <div ...