【Amazon】人気の商品が日替わりで登場!
毎日お得なタイムセール!商品をみる

【React】inputに値や文字が入力できない時の原因と対処法

本記事では、Reactでinputに値や文字が入力できない時の原因と対処法について解説しています。

Reactの学習におすすめ書籍
モダンJavaScriptの基本から始める React実践の教科書
総合評価
( 5 )
メリット
  • JavaScriptの基礎から始めてReactの機能を一通り学べる
  • 実務で必要となる知識を意識しながら学習を進められる
  • 現場のシチュエーションベースのストーリーで技術解説
\楽天ポイント5倍セール!/
楽天市場で探す
\ポイント5%還元!/
Yahoo!ショッピングで探す
先輩くん

Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!

後輩ちゃん

初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!

全プログラマー必見!
変数名/関数名にもう悩まない!
リーダブルコード
総合評価
( 5 )
メリット
  • 美しいコードが書けるが自然と書けるようになる
  • 他の開発者が理解しやすいコードになる
著:Dustin Boswell, 著:Trevor Foucher, 解説:須藤 功平, 翻訳:角 征典
¥2,640 (2023/07/23 02:48時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場で探す
\ポイント5%還元!/
Yahoo!ショッピングで探す

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の使い方が分からない方は、こちらの記事をご参照ください。

ブログランキング・にほんブログ村へ PVアクセスランキング にほんブログ村 FC2 Blog Ranking

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次