ホームページ ウェブフロントエンド jsチュートリアル React の Ref と DOM を理解する: DOM 要素へのアクセスと操作

React の Ref と DOM を理解する: DOM 要素へのアクセスと操作

Jan 02, 2025 pm 05:07 PM

Understanding Refs and the DOM in React: Accessing and Manipulating DOM Elements

React の Ref と DOM: DOM 要素へのアクセスと操作

React では、refsDOM 要素 に直接アクセスして対話するために使用されます。 React は通常、state と props を通じて宣言的な方法で DOM を管理しますが、アニメーション、フォーム フィールドのフォーカス、要素の寸法の測定など、DOM と直接対話する必要がある場合があります。このような場合、ref は基礎となる DOM ノードにアクセスする方法を提供します。


1. React の Ref とは何ですか?

ref (reference の略) は、DOM 要素または React コンポーネント インスタンスを参照できるようにするオブジェクトです。 Ref は、クラス コンポーネントの React.createRef() または関数コンポーネントの useRef() を使用して作成できます。通常、Ref は次の目的で使用されます。

  • DOM に直接アクセスします (たとえば、入力フィールドにフォーカスしたり、フォーム要素の値を取得したりします)。
  • 命令型アニメーションまたはアクションをトリガーします。
  • 直接 DOM 操作を必要とするサードパーティ ライブラリと統合します。

2. Ref の作成と使用

クラスコンポーネント内:

クラスコンポーネントでは、React.createRef() を使用して参照が作成されます。作成された ref は、ref 属性を介して DOM 要素にアタッチされます。

クラスコンポーネント内の参照の例:

import React, { Component } from 'react';

class MyComponent extends Component {
  constructor(props) {
    super(props);
    // Create a ref to access the input element
    this.inputRef = React.createRef();
  }

  handleFocus = () => {
    // Access the DOM node directly and focus the input element
    this.inputRef.current.focus();
  };

  render() {
    return (
      <div>
        <input ref={this.inputRef} type="text" />
        <button onClick={this.handleFocus}>Focus Input</button>
      </div>
    );
  }
}

export default MyComponent;
ログイン後にコピー
ログイン後にコピー

この例では:

  • this.inputRef は React.createRef().
  • を使用して作成されます。
  • ref は に割り当てられます。 ref 属性を介して要素を取得します。
  • handleFocus メソッドでは、this.inputRef.current 経由で入力要素にアクセスし、focus() を呼び出してプログラム的に入力フィールドにフォーカスします。

関数コンポーネント内:

関数コンポーネントでは、useRef フックを使用して参照が作成されます。 useRef フックを使用すると、再レンダリング後も保持される変更可能な参照オブジェクトを作成できます。

関数コンポーネントの Ref の例:

import React, { useRef } from 'react';

const MyComponent = () => {
  const inputRef = useRef();

  const handleFocus = () => {
    // Access the DOM node directly and focus the input element
    inputRef.current.focus();
  };

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={handleFocus}>Focus Input</button>
    </div>
  );
};

export default MyComponent;
ログイン後にコピー
ログイン後にコピー

この例では:

  • inputRef は useRef フックを使用して作成されます。
  • ref は に添付されます。 ref 属性を使用した要素。
  • handleFocus 関数は、inputRef.current を使用して入力要素にアクセスし、focus() を呼び出して入力フィールドにフォーカスします。

3. Ref の使用例

a. DOM 要素へのアクセス

Ref は、DOM 要素に直接アクセスして操作するためによく使用されます。たとえば、テキスト入力に焦点を当てたり、要素のサイズを測定したりすることは、refs を使用して簡単に行うことができます。

b.フォーカスの管理

Ref を使用すると、コンポーネントのマウント時や特定のアクションの後に入力フィールドにフォーカスするなど、要素のフォーカスを管理できます。

Ref を使用したフォーカス管理の例:

import React, { Component } from 'react';

class MyComponent extends Component {
  constructor(props) {
    super(props);
    // Create a ref to access the input element
    this.inputRef = React.createRef();
  }

  handleFocus = () => {
    // Access the DOM node directly and focus the input element
    this.inputRef.current.focus();
  };

  render() {
    return (
      <div>
        <input ref={this.inputRef} type="text" />
        <button onClick={this.handleFocus}>Focus Input</button>
      </div>
    );
  }
}

export default MyComponent;
ログイン後にコピー
ログイン後にコピー

この例では、useEffect フックと ref のおかげで、コンポーネントがマウントされるときに入力が自動的にフォーカスされます。

c.アニメーションのトリガーまたはサードパーティのライブラリとの統合

Ref は、サードパーティのライブラリと対話したり、命令型アニメーションをトリガーしたりするためによく使用されます。たとえば、ref を使用してカスタム アニメーションを制御したり、jQuery などの非 React ライブラリを操作したりできます。

d.フォームの検証

Ref を使用して、データを React の状態に保存せずにフォーム データを収集することもでき、リアルタイムの更新を必要としないフォームに簡単な代替手段を提供します。


4.複数の要素の Ref の管理

複数の要素を操作する場合、オブジェクトまたは配列に ref を格納して各要素にアクセスできます。

複数の要素の Ref の例:

import React, { useRef } from 'react';

const MyComponent = () => {
  const inputRef = useRef();

  const handleFocus = () => {
    // Access the DOM node directly and focus the input element
    inputRef.current.focus();
  };

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={handleFocus}>Focus Input</button>
    </div>
  );
};

export default MyComponent;
ログイン後にコピー
ログイン後にコピー

この例では、複数の入力要素が refs の配列を使用して管理され、ボタンを使用して 2 番目の入力にフォーカスします。


5.審判対州

ref は DOM と対話する方法を提供しますが、React の state は UI のレンダリングに影響するデータを管理するために使用されます。それぞれをいつ使用するかを理解することが重要です:

  • State動的レンダリング に使用されます: データが変更され、UI のレンダリング方法に影響を与える場合は、state を使用します。
  • Ref命令的なアクション に使用されます。DOM 要素と直接対話する必要がある場合 (アニメーションのフォーカス、測定、トリガーなど)、refs.
  • を使用します。

6.結論

React の Ref は、DOM 要素に直接アクセスして操作するための強力な機能です。これらは UI を操作するための必須の方法を提供し、入力フィールドのフォーカス、アニメーションのトリガー、サードパーティ ライブラリとの統合などの操作を可能にします。

React は state と props を使用した宣言的なアプローチを推奨していますが、DOM とのより直接的なやり取りを実行する必要がある場合、ref は不可欠なツールとして機能します。

以上がReact の Ref と DOM を理解する: DOM 要素へのアクセスと操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:16 PM

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:17 PM

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

chart.js:パイ、ドーナツ、バブルチャートを始めます chart.js:パイ、ドーナツ、バブルチャートを始めます Mar 15, 2025 am 09:19 AM

このチュートリアルでは、chart.jsを使用してパイ、リング、およびバブルチャートを作成する方法について説明します。以前は、4つのチャートタイプのchart.js:ラインチャートとバーチャート(チュートリアル2)、およびレーダーチャートと極地域チャート(チュートリアル3)を学びました。 パイとリングチャートを作成します パイチャートとリングチャートは、さまざまな部分に分かれている全体の割合を示すのに理想的です。たとえば、パイチャートを使用して、サファリの男性ライオン、女性ライオン、若いライオンの割合、または異なる候補者が選挙で受け取る票の割合を示すことができます。 パイチャートは、単一のパラメーターまたはデータセットの比較にのみ適しています。パイチャートのファンの角度はデータポイントの数値サイズに依存するため、パイチャートは値のあるエンティティをゼロ値で描画できないことに注意してください。これは、割合がゼロのエンティティを意味します

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

See all articles