本文へスキップ
BecomeCoder

Reactコース · 第4章 useEffectとこれから · レッスン12

小さなTODOアプリ

ブラウザで完結

導入

ここまでの useStatemap・イベント・条件表示を組み合わせると、もう小さなアプリが作れます。入力を追加していく TODO リストを作ってみましょう。

説明

入力欄・追加ボタン・一覧を組み合わせています。

function App() {
  const [items, setItems] = React.useState(["牛乳を買う", "React を学ぶ"]);
  const [text, setText] = React.useState("");

  function add() {
    if (text.trim() === "") return;
    setItems([...items, text]);
    setText("");
  }

  return (
    <div style={{ fontFamily: "system-ui", maxWidth: 320 }}>
      <h2>やることリスト</h2>
      <input value={text} onChange={(e) => setText(e.target.value)} placeholder="やることを入力" />
      <button onClick={add}>追加</button>
      <ul>
        {items.map((item, i) => (
          <li key={i}>{item}</li>
        ))}
      </ul>
      <p>残り {items.length} 件</p>
    </div>
  );
}
  • setItems([...items, text]) … 元の配列コピーして末尾に追加した新しい配列を渡します(元の配列を直接 push しないのがReact流)。
  • 追加後に setText("") で入力欄を空に戻しています。
  • items.length で件数を表示。state が変わるたびに全部が最新の表示に更新されます。

やってみよう

各項目の横に「削除」ボタンを付けてみましょう(ヒント: setItems(items.filter((_, idx) => idx !== i)))。

実際に動かしてみよう

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

React — ブラウザ内で実行

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