第15回:React基礎編・総まとめ:ToDoアプリで全知識を繋げよう

lang

前回:カスタムフック自作入門:ロジックを共通化してコードをスッキリさせるでは、自分専用のオリジナル・フックを作る高度なテクニックを学びました。

全25回のカリキュラムのうち、今回で「基礎編」が完結します。これまでに学んだ「JSX」「Props」「State」「Hooks」というバラバラのピースを、1つの実用的なアプリとして完成させましょう!


1. 基礎知識の「全部盛り」パズル

Reactの学習は、よく「パズル」に例えられます。

  • JSX (第3回): 見た目を作る。
  • Props (第5回): 部品に情報を渡す。
  • useState (第6回): データを記憶する。
  • useEffect (第11回): タイミングを計る。
  • カスタムフック (第14回): 仕組みを共通化する。

これらが組み合わさることで、本物のアプリが動き出します。


2. 【実践】集大成の「ToDoアプリ」

学んだ技術を総動員して、実用的なToDoアプリを作成します。 第2回の環境で作成した App.jsx を以下のコードに書き換えてください。

App.jsx(基礎編・完結版)

JavaScript

import React, { useState } from 'react';

// [第4回] コンポーネントの分割
function TodoItem({ task, onDelete }) {
  return (
    <li>
      {task} 
      <button onClick={onDelete} style={{ marginLeft: '10px' }}>削除</button>
    </li>
  );
}

export default function App() {
  // [第6回・第10回] 状態管理とフォームの制御
  const [todos, setTodos] = useState([]);
  const [input, setInput] = useState("");

  const addTodo = (e) => {
    e.preventDefault(); // [第10回] リロード防止
    if (input === "") return;
    
    // [第8回] リストに新しいデータを追加(スプレッド構文)
    setTodos([...todos, { id: Date.now(), text: input }]);
    setInput(""); 
  };

  return (
    <div style={{ textAlign: 'center', marginTop: '50px' }}>
      <h1>React基礎の集大成:ToDoアプリ</h1>
      
      <form onSubmit={addTodo}>
        <input 
          value={input} 
          onChange={(e) => setInput(e.target.value)} 
          placeholder="新しいタスク..."
        />
        <button type="submit">追加</button>
      </form>

      {/* [第9回] 条件付きレンダリング */}
      {todos.length === 0 && <p>タスクはありません。自由な時間です!</p>}

      {/* [第8回] map関数によるリスト表示 */}
      <ul style={{ listStyle: 'none', padding: 0 }}>
        {todos.map((todo) => (
          <TodoItem 
            key={todo.id} 
            task={todo.text} 
            onDelete={() => setTodos(todos.filter(t => t.id !== todo.id))} 
          />
        ))}
      </ul>
    </div>
  );
}

CodeSandboxで基礎編まとめのToDoアプリを動かす


3. コードのポイント解説

JavaScript:データの不変性(イミュータビリティ)

[...todos, newTodo] という書き方は、元の配列を直接いじらずに「新しい配列」を作るJavaScriptの重要な手法です。Reactは「新しいオブジェクト」に置き換わった時だけ、正しく再描画してくれます。

React:単方向データフロー

親(App)がデータ(todos)を持ち、子(TodoItem)はそれを受け取って表示する。削除という「変化」が必要な時は、親から渡された関数を実行する。この**「データは上から下へ、イベントは下から上へ」**という流れがReactの核心です。


4. 基礎を終えたあなたへ

全25回のうち、最初の15回で「Reactの文法」をマスターしました。 しかし、本物のサービスを作るには、まだ足りないピースがあります。

  • 複数のページを切り替えるには?(ルーティング)
  • 巨大なアプリでデータを共有するには?(状態管理ライブラリ)
  • 2026年の標準、TypeScript で型をつけるには?

これら「プロの現場」で必須となる知識を、後半戦(第16回〜第25回)でじっくり学んでいきましょう。


今回のまとめ

  1. Reactの基礎は 「データ(State)と見た目(JSX)」の同期
  2. 複雑なアプリも、分解すれば 小さなコンポーネントの集まり
  3. 基礎が固まれば、応用的なライブラリの習得速度は劇的に上がる。

次回予告:ページが切り替わる魔法「ルーティング」

これまでは1つの画面だけを扱ってきました。でも、普通のサイトには「ホーム」「プロフィール」「設定」など複数のページがありますよね。

次回、「第16回:React Router入門:ページ遷移とURL設計の基本」。 シングルページアプリケーション(SPA)の醍醐味、画面が瞬時に切り替わる仕組みを実装します。お楽しみに!


本日の宿題: 今回作ったToDoアプリに「完了(チェックボックス)」機能を追加してみてください。チェックがついたら文字に打ち消し線を引くことはできますか?(ヒント:todo オブジェクトに completed: false というデータを追加します!)

コメント

タイトルとURLをコピーしました