React 速習チュートリアル

React フォーム - Textarea

1. Textarea の扱い

React における textarea 要素は、通常の HTML とは少し異なる挙動を示します。

1.1 HTML と React の違い

標準的な HTML では、textarea の値(バリュー)は開始タグ <textarea> と終了タグ </textarea> の間に記述されたテキストとなります。

<textarea>
  テキストエリアの内容。
</textarea>

しかし、React では textarea の値は、input 要素と同様に value 属性の中に配置されます。これにより、React の ステート(State) で値を直接コントロールすることが可能になります。

2. React での制御

textarea の値を管理するために、useState フックを使用します。

2.1 実装例:制御された Textarea

React では value 属性を使用して textarea をコントロール(制御)します。

import { createRoot } from 'react-dom/client'
import { useState } from 'react'

function MyForm() {
  // テキストエリアの値を保持するステート変数を宣言
  const [mytxt, setMytxt] = useState("");

  // 入力変更時のイベントハンドラー
  function handleChange(e) {
    setMytxt(e.target.value);
  }

  return (
    <form>
      <label>入力してください:
        <textarea
          value={mytxt} // ステートを値にバインド
          onChange={handleChange} // 変更を検知してステートを更新
        />
      </label>
      <p>現在の値: {mytxt}</p>
    </form>
  )
}

createRoot(document.getElementById('root')).render(
  <MyForm />
);

このように、React の 制御コンポーネント(Controlled Components) パターンを用いることで、入力内容をリアルタイムで検証したり、別のコンポーネントへ即座に反映させたりすることが非常に容易になります。従来の HTML のように DOM から直接値を取得するのではなく、常にステートを「唯一の信頼できる情報源(Single source of truth)」として扱うのが React 流の流儀です。