useRefの使いどき

記事
IT・テクノロジー
Reactを学んでいると、useRefは「いつ使えばいいのか分かりづらいフック」と感じる人が多いと思います。
useStateとの違いが曖昧なまま使ってしまい、結果的にコードが分かりにくくなるケースも少なくありません。

この記事では、useRefを使うべき場面と、逆に使わないほうがいい場面を整理します。

useRefの本質

useRefは「再レンダリングに影響しない値を保持するためのフック」です。
値が変わってもコンポーネントは再レンダリングされません。

つまり、
「画面表示には直接関係しないけど、コンポーネントの中で保持しておきたい情報」
を扱うのがuseRefの役割です。

useRefを使う代表的な場面① DOMを直接操作したいとき

useRefが最もよく使われるのは、DOMを直接操作するケースです。

例えば、
・特定の入力欄に自動でフォーカスを当てたい
・スクロール位置を制御したい
・アニメーションライブラリと組み合わせたい

こういった処理は、状態管理ではなく「命令的な操作」になります。
Reactの再レンダリングとは独立してDOMに触りたいとき、useRefが自然な選択になります。

useRefを使う代表的な場面② 値は変わるが再描画は不要なとき

useRefは「値は更新したいが、画面は更新したくない」場合にも使われます。

例えば、
・前回の値を一時的に保持しておきたい
・タイマーやインターバルのIDを保持したい
・処理中かどうかのフラグを内部的に管理したい

これらをuseStateで管理すると、値が変わるたびに再レンダリングが発生します。
再レンダリングが不要、もしくは困る場合にuseRefが活きてきます。

onChangeのたびにuseRefを使うべきか?

入力フォームでよくある疑問として、
「onChangeのたびに再レンダリングされるのが嫌だからuseRefを使うべきか?」
というものがあります。

結論としては、基本的には使うべきではありません。

入力値は画面表示やバリデーションなどに直結するため、React的には状態として扱うのが自然です。
useRefで管理すると、UIとデータの整合性が崩れやすくなります。

パフォーマンスが問題になるケースは稀で、多くの場合は設計の見直しで解決できます。

useRefを使わないほうがいい場面

useRefは便利ですが、乱用するとコードの可読性が下がります。

次のような場合は注意が必要です。
・画面表示に影響する値を管理している
・状態の変化をトリガーに処理をしたい
・本来useStateで表現できるロジックを避けている

useRefはあくまで「避難ハッチ」であり、メインの状態管理手段ではありません。

useStateとの使い分けの考え方

迷ったときは、次の基準で考えると判断しやすくなります。

その値が変わったとき、
「画面は更新されるべきか?」

・Yes → useState
・No → useRef

この基準を持っておくと、useRefの使いどきを見失いにくくなります。

まとめ

useRefは「再レンダリングしない値を持ちたいとき」に使うフックです。
DOM操作や内部的な値管理など、Reactの描画サイクルから切り離したい処理で真価を発揮します。

一方で、入力値やUIに直結するデータはuseStateで管理するのが基本です。
「なぜuseRefを使うのか」を説明できる状態で使うことが、きれいなReactコードへの近道です。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら