ReactのuseStateについて簡単にまとめてみます。
state・useStateについて
Reactのコンポーネント内で管理されるデータや状態のことをstateと呼び、その値が変わると自動的にUIが再レンダリングされるような仕組みが用意されています。
stateの例としては、ボタンのクリック毎にカウントアップしていくカウンターの値や、フォームに入力すると画面内の一部が更新される値などがあります。
useStateは、コンポーネント内でstateを管理するために使われるReactのフックです。
サンプルコード
例として、フォーム入力された数値の2倍をページ上に表示する実装で試してみます。
まずはうまくいかない例(useStateを使用しない例)です。
export default function Calculate() {
let result;
function handleChange(e) {
const value = e.target.value;
result = value * 2;
}
return (
<div>
<input
type="number"
onChange={handleChange}
/>
<div>2倍の値:{result}</div>
</div>
)
}
onChangeイベントでresultの値を入力値の2倍に変更していますが、ページの表示には反映されません。
変数resultの値の変更はされていますが、その変更内容を元に再レンダリングがされていないためです。
うまくいかない場合のデモページ
次にuseStateを使ってみます。
useStateの定義は以下のように行います。
const [state, setState] = useState(initialState)
useState()の引数にはstateの初期値となる値を指定します。
また返り値は分割代入を利用して受け取っていて、1つ目が現在のstate変数で、2つ目がstate更新と再レンダリングを行う関数になります。
import { useState } from 'react';
export default function Calculate() {
const [result, setResult] = useState(0);
function handleChange(e) {
const value = e.target.value;
setResult(value * 2);
}
return (
<div>
<input
type="number"
onChange={handleChange}
/>
<div>2倍の値:{result}</div>
</div>
)
}
1行目でuseStateをインポートした上で、4行目でuseStateの定義、8行目でstateの更新を行っています。
useStateを使用するデモページ
stateはコンポーネント内で独立しているため、他のコンポーネントには影響しません。
例えば前述のコンポーネントを以下のように2つ読み込み、片方のstateを変更した場合、もう一方のstateには影響がありません。
<Calculate /> <Calculate />
コメントが承認されるまで時間がかかります。