本記事では、Reactでinputに入力された値をリアルタイムで取得する方法について解説しています。
Reactの学習におすすめ参考書
モダンJavaScriptの基本から始める React実践の教科書
綺麗なコードが書けるようになる!
リーダブルコード-より良いコードを書くためのシンプルで実践的なテクニック
サンプルコード
下記のコードは、テキストフォームに入力された値をリアルタイムで表示させるサンプルコードです。このサンプルコードを用いて解説していきます。
import { useState } from "react";
function App() {
const [val, setVal] = useState("");
const onInputValueChanged = (e) => setVal(e.target.value);
return (
<>
<p>入力値:{val}</p>
<input type="text" value={val} onChange={onInputValueChanged} />
</>
);
}
export default App;
useStateの準備
useStateを使用したいので、reactからimportします。
import { useState } from "react";
useStateの値はテキストフォームで入力された値を保持する役割を持つので、初期値には空文字を指定します。もし、テキストフォームに最初から文字が入力されている状態にしたい場合は、初期値に任意の文字列を指定してください。
const [val, setVal] = useState("");
属性の設定
<input />には必ず2つの属性を指定する必要があります。
1つ目がテキストフォームに入力された値をセットするvalue属性です。この属性値にはuseStateで渡された値(val)を指定します。
<input type="text" value={val} />
2つ目がテキストフォームに入力された時に発火するchangeイベントです。Reactでは、changeイベントはonChangeと記述します。属性値にはchangeイベントが発火した時に実行させたい関数を指定します。この関数内の処理は次の見出しで解説します。
<input type="text" onChange={onInputValueChanged} />
changeイベントが発火した時の関数を定義する
changeイベントが発火した時の関数を定義します。この関数で行いたい処理は入力された値をuseStateにセットし再レンダリングさせることです。
入力された値を取得するには「引数.target.value」を使用します。後は、取得した値をそのままuseStateの更新用関数に渡してあげれば、テキストフォームに値が入力されるたびにuseStateが更新され再レンダリングされます。
const onInputValueChanged = (e) => setVal(e.target.value);