本文へスキップ
BecomeCoder

Reactコース · 第3章 stateとイベント · レッスン9

入力を扱う ― フォームとstate

ブラウザで完結

導入

テキスト入力の値も state で持つと、「入力した内容をその場で表示する」といったことができます。入力と state を結び付けたものを制御コンポーネントと呼びます。

説明

入力欄の value を state に結び付け、onChange で更新します。

function App() {
  const [text, setText] = React.useState("");
  return (
    <div style={{ fontFamily: "system-ui" }}>
      <input
        value={text}
        onChange={(e) => setText(e.target.value)}
        placeholder="名前を入力"
      />
      <p>こんにちは、{text || "名無し"} さん</p>
      <p>入力した文字数: {text.length}</p>
    </div>
  );
}
  • value={text} … 入力欄の中身を state と同じにします。
  • onChange={(e) => setText(e.target.value)} … 入力されるたびに e.target.value(入力された文字列)で state を更新します。
  • state が変わると再描画され、<p> の表示も即座に更新されます。

やってみよう

入力した文字を大文字に変換して表示してみましょう({text.toUpperCase()})。また、文字数が10を超えたら警告文を出すには?(ヒント: {text.length > 10 && <span>長すぎます</span>}

実際に動かしてみよう

下のエディタにReactのコードを書くと、右側のプレビューにその場で描画されます。`function App() { ... }` を定義すると自動で表示されます(React・useState などは React.useState の形で使えます)。本文の例を打ち込んだり書き換えたりして、表示の変化を確かめながら進めましょう。

React — ブラウザ内で実行

JSXをその場で変換して描画する学習用React環境(React18 + Babel・同梱)を読み込みます。
スクロールして表示された時点でも自動で読み込まれます。