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 の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。 1. フィールド タ...

MySQL 数値型オーバーフローの処理方法

さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...

MySQL (InnoDB) がデッドロックを処理する方法の詳細な説明

1. デッドロックとは何ですか?正式な定義は次のとおりです: 2 つのトランザクションが相手側で必要...

CSS スタイルの競合を解決するいくつかの方法 (要約)

1. セレクターを調整するコンビネータを使用すると、セレクターの説明をより正確に記述できます (C...

Vue3.0はチェックボックスコンポーネントのカプセル化を実装します

この記事では、チェックボックスコンポーネントのカプセル化を実装するためのvue3.0の具体的なコード...

CSS3は、ズームと回転を実現するためにscale()とrotate()を使用します。

1. scale() メソッドズームとは「縮小」と「拡大」を意味します。 CSS3 では、scal...

Docker+K8S クラスタ環境構築と分散アプリケーション展開

1. Dockerをインストールする yumでdockerをインストール #サービスを開始する sy...

ボタンを使用してフォームを送信する代わりに、画像を使用してフォームを送信します。

コードをコピーコードは次のとおりです。 <フォームメソッド="post" ...

vue3ソースコード解析の簡単な実装方法

目次序文🍹準備🍲vue3 の使い方🍖 実装要約する序文最近、私の最初の公式 vue3 + ts プロ...

jQueryはフェードインとフェードアウト効果を実現します

jQuery を使用してフェードインとフェードアウト効果を完成させる前に、まずいくつかのコードを理解...

フロントエンド開発一般マニュアル(ツール、Webサイト、経験などを含む)

今日は何もすることがなかったので、いくつかのツール(オンラインとクライアント)、よく使用する URL...

データベースを削除して逃げる?xtraback を使用して MySQL データベースをバックアップする方法

1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

MySql 学習 3 日目: データ テーブル間の接続とクエリの詳細

主キー:キーワード: 主キー機能: null にすることはできず、一意である必要があります。主キーの...

MySQLで日付と時刻を照会する方法

序文:プロジェクト開発では、一部のビジネス テーブル フィールドで日付と時刻の型が使用されることが多...