はじめに
恥ずかしながら実業務をしてる際に、題目の「useStateとuseRefの違い」
を答えることができなかったので今回はまとめさせて頂きます。
文法覚えただけなのほんまに良くない
useStateとは
useState
とは、関数コンポーネントのstate
を保持したり、更新したりするためのフックになります。
useState
はReactのコンポーネントの状態管理に使用されておりstate
が変更されると再レンダリングされます。
import { useState } from 'react'
import './App.css'
function App() {
const [count,setCount] = useState(0)
const handleClick = () => {
setCount(prev => prev + 1)
}
return (
<>
<h1>useState</h1>
<button onClick={handleClick}>count is {count}</button>
</>
)
}
export default App
上記のコードでボタンをクリックしていくとcountが増えていく簡易的なページが作成されます。
const [count,setCount] = useState(0)
こちらは第1引数に現在の値と、第2引数に更新関数を返しています。
count
にはuseState
の引数が初期値として格納されます。
useRefとは
useRef
は、DOMを参照して要素にアクセスするためのフックになります。
また、DOMの参照に使われることが多いですがReactコンポーネント内の値に対して参照を作成するために使用することも可能です。
こちらもサンプルコードで使い方を説明します。
import { useRef } from "react";
import "./App.css";
function App() {
const ref = useRef(null);
const handleRef = () => {
console.log(ref);
console.log("input", ref.current);
console.log("value", ref.current.value);
console.log("width", ref.current.offsetWidth);
};
return (
<div className="App">
<h1>hello react</h1>
<input type="text" ref={ref}></input>
<button onClick={handleRef}>useRef</button>
</div>
);
}
export default App;
コードについて一部説明します。
const ref = useRef(null);
上記は初期値がnullの、inputを参照をref
変数に保持するコードになります。
そしてボタンをクリックしてhandleRef
を発火させると...
上記の出力の通りに通りに、DOM要素にアクセスしていることがわかるかなと思います。
また、useRef
について補足するとRefオブジェクト({current: initialValue})
を生成してその値をメモ化しているのが実態になります。
そんで、結局違いはどこなの?
state
は変更されると再レンダリングされますが、同じく値を保持できるref
の値を変更しても再レンダリングがトリガーされないというところが最大の違いです!
概要としてuseState
はコンポーネント内での状態管理に使用し、useRef
はDOM要素への参照や値の保存に使用されると覚えれば大枠が理解できるかなと思います。
参照