🦔
【React】useRefでDOMを操作する
はじめに
チェスアプリを実装していて、初めてuseRef
を使ったので、調べたことを備考録としてまとめました。
useRefとは
useRef
hookを使うと、更新しても再レンダリングが発生せず、変更可能な値を保持しつつ、
DOM要素に直接アクセスすることができます。[1]
const ref = useRef(initialValue)
DOM操作の手順
1. 初期値をnullとするrefオブジェクトを宣言
値を参照するには、コンポーネントのトップレベルでuseRef
を呼び出し、refを宣言します。
import { useRef } from 'react';
function Chessboard() {
const chessboardRef = useRef<HTMLDivElement>(null);
// ...
2. 操作したいDOMノードのJSXに、refオブジェクトをref属性として渡す
DOMノードを作成し画面に表示した後、Reactはref
オブジェクトのcurrent
プロパティをそのDOMノードに設定します。この時点で、DOMにアクセスしたり、関数を呼び出したりできます。
return (
<div
...
ref={chessboardRef}
>{board></div>
)
全体のコード
import { useRef } from 'react';
function Chessboard() {
const chessboardRef = useRef<HTMLDivElement>(null);
// ...
return (
<div
...
ref={chessboardRef}
>{board></div>
)
useRef
は、指定された初期値に初期設定された1つのcurrent
プロパティを持つref
オブジェクトを返します。
試しに、console.log(chessboardRef)
で出力してみると、以下のようにcurrent
プロパティを持つref
オブジェクトがreturn
されます。
参考
useRef
Manipulating the DOM with a ref
-
ref
を変更しても再レンダリングは行われないので、画面に表示する情報を保存するにはref
は適していません。その場合は、state
を使用します。
useRefとuseStateの使い分けについて ↩︎
Discussion