useRef
レンダー時には不要な値を参照するための React フック。
const ref = useRef(initialValue);
Basic usage
useRef は次の形式のオブジェクトを返す。
const countRef = useRef(0);
console.log(countRef);
// => { current: 0 }
ref の現在の値には ref.current
プロパティを通じてアクセスできる。
console.log(countRef.current);
// => 0
countRef.current += 1;
console.log(countRef.current);
// => 1
Examples
RefCounter
useRef で定義された変数の ref.current
プロパティを更新しても コンポーネントの再描画 (re-render) は行われない 。ref はただの JavaScript オブジェクトであり、変更されたとしても React が検知することはできない。
ref.current
プロパティそのものは更新されているため、明示的に画面の再描画を行うことでページへ反映できる。次のコンポーネントは別途 useState フックで定義されたセッターを実行して再描画を行う例。
count: 0
このため再描画されることが前提のコンポーネントであれば useState フックを使用する方が適切。
useRef は再描画を必要としない場面 (DOM の参照や値の一時的保持 (公式では "避難ハッチ" (escape hatch) と呼ばれている) で有効。