ReactにおけるuseRefの具体的な使い方

ReactにおけるuseRefの具体的な使い方

React の経験がある人なら、コンポーネントインスタンスオブジェクトや DOM オブジェクトを取得するために使用できる ref をよくご存知だと思います。

従来の使用法に加えて、useRef フック関数は「レンダリング サイクル全体にわたって」データを保存することもできます。

まず、その伝統的な使用法を見てみましょう。

'react' から React、{ useState、useEffect、useMemo、useRef } をインポートします。

デフォルト関数App(props)をエクスポートする{
  定数[count, setCount] = useState(0);

  定数doubleCount = useMemo(() => {
    2 * カウントを返します。
  }, [カウント]);

  const カウンタRef = useRef();

  使用効果(() => {
    document.title = `値は ${count} です`;
    console.log(カウンタ参照.current);
  }, [カウント]);
  
  戻る (
    <>
      <button ref={couterRef} onClick={() => {setCount(count + 1)}}>カウント: {count}、double: {doubleCount}</button>
    </>
  );
}

このコードは、useRef を使用して counterRef オブジェクトを作成し、それをボタンの ref 属性に割り当てます。このように、couterRef.current にアクセスすることで、ボタンに対応する DOM オブジェクトにアクセスできます。

それでは、データを保存する方法を見てみましょう。

コンポーネント内に、レンダリング サイクルを超えて存続できるもの、つまりコンポーネントが複数回レンダリングされた後も一定のままであるプロパティはありますか?最初に思い浮かぶのは状態です。そうです、コンポーネントの状態は複数回のレンダリング後も変更されない場合があります。ただし、状態の問題は、状態が変更されると、コンポーネントが再レンダリングされることです。

現時点では、useRef はレンダリング サイクル全体にわたってデータを保存するために使用でき、これを変更してもコンポーネントのレンダリングは発生しません。

'react' から React、{ useState、useEffect、useMemo、useRef } をインポートします。

デフォルト関数App(props)をエクスポートする{
  定数[count, setCount] = useState(0);

  定数doubleCount = useMemo(() => {
    2 * カウントを返します。
  }, [カウント]);

  タイマーIDをuseRef()で設定します。
  
  使用効果(() => {
    タイマーID.current = setInterval(()=>{
        setCount(count => count + 1);
    }, 1000); 
  }, []);
  
  使用効果(()=>{
      if(カウント > 10){
          タイマーID.currentをクリアします。
      }
  });
  
  戻る (
    <>
      <button ref={couterRef} onClick={() => {setCount(count + 1)}}>カウント: {count}、double: {doubleCount}</button>
    </>
  );
}

上記の例では、ref オブジェクトの current プロパティを使用してタイマー ID を保存し、複数回のレンダリング後にタイマー ID を保存して、タイマーを正常にクリアできるようにしています。

React における useRef の具体的な使い方についてはこれで終わりです。React の useRef に関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ReactでuseStateを使用する詳細な例
  • JavaScript の useRef と useState の紹介

<<:  Centos7.x での Nginx のインストール、SSL 設定、一般的なコマンドの詳細な説明

>>:  Mysqlトランザクション処理の詳細な説明

推薦する

Mysqlは隣接リスト(隣接リスト)を通じてツリー構造を保存します。

以下の内容では、隣接リストを使用してツリー構造を保存する MYSQL のプロセスとソリューションを紹...

Dockerコンテナでユーザーを切り替えるときに権限が不足する問題を解決する方法

Docker コンテナでユーザーを切り替えると、権限が不十分であるというメッセージが表示されます。解...

Linuxオンラインソフトウェアgccをオンラインでインストールする方法

Linux オンラインインストール関連コマンド: yum install: すべてインストールyum...

HTML特殊文字の徹底分析

HTML徹底解析(14)特殊文字 ■ よく使われる特殊文字 HTMLタグを知っていれば、特殊文字の使...

HTML スライドフローティングボールメニュー効果の実装

CSS スタイル html,本文{ 幅: 100%; 高さ: 100%; マージン: 0;パディング...

CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策

ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...

同じレベルの要素で Position:fixed と margin-top を一緒に使用する場合の CSS の問題

問題の説明CSS を使用して上部の固定効果を実現したいと思います。 margin-top と pos...

Linux で静的ルーティングを追加するための 2 つの実装方法の分析

ルートを追加するコマンド: 1.ルート追加route add -net 192.56.76.0 ne...

MySQLのよくある間違い

NULL 値によると、MySQL の NULL 値は単にデータがないことを意味します。NULL 値は...

MySQL における識別子の大文字と小文字の区別の問題の詳細な分析

MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラ...

JavaScript は setTimeout を使用してカウントダウン効果を実現します

JavaScript ネイティブ コードの記述能力を高め、setTimeout() の使用を強化する...

ゲーム着物メモ問題の簡単な分析

本日、ゲームを再起動した後、バックアップしたデータをターゲットデータベースにインポートできないことが...

行の高さと垂直方向の配置についての深い理解

いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...

UbuntuはSSHサービスのリモートログイン操作を開始します

ssh-secure シェルは、安全なリモート ログインを提供します。組み込みシステムを開発し、Li...

ウェブサイトをIE6、7、8、9の古いバージョンに対応させるための3つのソリューション

Microsoft は後からブラウザの研究開発に力を入れてきましたが、実際のところ、最新の IE ブ...