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

推薦する

Docker Desktop で rocketmq をインストールするための非常に詳細なチュートリアル

Dockerデスクトップをインストールするダウンロード先: Docker Desktop for M...

JavaScript でエラーが発生しやすい演算子操作の概要

目次算術演算子異常状況1: 特殊値リテラルを含む操作異常な状況 2: 他の種類のデータが数学演算に関...

Linux に MySQL 8.0.19 をインストールするための詳細な手順と問題解決方法

最近Tencent Cloudサーバーを購入し、環境を構築しました。このメモは、これまで MySQL...

一意の注文番号を生成するためのMySQLの高同時実行方法

序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...

TypeScript インターフェースの紹介

目次1. インターフェース定義2. 属性2.1 オプション属性2.2 読み取り専用プロパティ3. ク...

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

WeChatアプレットのオーディオコンポーネントがiOSで再生できない問題の解決策

解決策:クリック イベントをオーディオ コンポーネントにバインドし、再生メソッドと一時停止メソッドを...

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

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

高品質なウェブページのデザイン方法 高品質なウェブページ(画像とテキスト)のデザイン経験

オープンプラットフォームの増加に伴い、そこから派生するさまざまなアプリケーションサービスも増加傾向に...

MySQL 学習: 初心者のための 3 つのパラダイム

目次1. パラダイム基盤1.1 パラダイムの概念2. 3つの主要なパラダイム2.1 3つの主要なパラ...

Zabbixのカスタム監視項目とトリガーについて

目次1. 監視ポート関係の説明操作する2. 監視サービス関係の説明操作する3. テンプレートのインポ...

データベース管理に役立つ 5 つの MySQL GUI ツール

MySQL には多くのデータベース管理ツールがあります。作業効率の向上に役立つ優れた GUI ツール...

Vue.js パフォーマンス最適化 N 個のヒント (収集する価値あり)

目次機能コンポーネント子コンポーネントの分割ローカル変数v-show によるDOMの再利用キープアラ...

Linux と Windows でスケジュールされたタスクを設定する方法

目次リナックス1. crontabの基本的な使い方2. ログを有効にする3. スケジュールされたタス...

Vue3 (III) ウェブサイトホームページレイアウト開発

目次1. はじめに2. 実際の事例1. App.vueを変更する2. レイアウトを調整する3. ジャ...