本記事では、Reactでinputに値や文字が入力できない時の原因と対処法について解説しています。
Reactの学習におすすめ参考書
モダンJavaScriptの基本から始める React実践の教科書
先輩くん
Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!
後輩ちゃん
初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!
綺麗なコードが書けるようになる!
リーダブルコード-より良いコードを書くためのシンプルで実践的なテクニック
先輩くん
より良いコードを書きたい人におすすめの本だよ!
後輩ちゃん
10以上前の書籍ですが、内容は今でも役に立つものばかりです!
inputに入力が出来ない時の原因で考えられるのは、通常の変数に入力された値を代入させそれをvalue属性にセットしているケースです。下記のコードをご覧ください。
function App() {
let inputValue = "";
const onInputValueChanged = (e) => {
inputValue = e.target.value;
console.log(inputValue);
};
return (
<>
<p>入力された値:{inputValue}</p>
<input type="text" value={inputValue} onChange={onInputValueChanged} />
</>
);
}
export default App;
一見問題ないように見えますが、テキストフォームに値を入力することは出来ません。何故このようなことになるのか、その理由は再レンダリングがされていないからです。
value属性には初期値が空文字の変数inputValueを指定しています。再レンダリングされないと、value属性の値が永遠に更新されないため空文字がセットされ続けている状態になります。
これを解決するには、値が更新された時に再レンダリングするuseStateを使用します。先ほどのコードをuseStateに置き換えました。
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の使い方が分からない方は、こちらの記事をご参照ください。