本日は、StudyTracker アプリのコードの可読性および保守性を向上させるため、
メインページに記述していた処理をコンポーネントに分割した。
Reactでは、UIを小さな部品(コンポーネント)として分割することで、
コードの可読性や再利用性が向上する。
また、タスクの編集機能(Update)も実装し、
タスクの CRUD(Create / Read / Update / Delete)機能を完成させた。
今回のコンポーネント構造は以下の通り。
page.tsx
├ TaskForm
└ TaskList
└ TaskItem
各コンポーネントの役割は以下。
TaskForm :タスク入力フォーム
TaskList :タスク一覧表示
TaskItem :タスク1行表示(編集・削除)
役割ごとにコンポーネントを分割することで、コードの責務を明確にした。
TaskForm はタスクを入力し追加するためのコンポーネント。
// propsの型定義
type Props = {
task: string; // 入力中のタスク
setTask: (task: string) => void; // タスク入力値を更新する関数
addTask: () => void; // タスク追加関数
};
export default function TaskForm({ task, setTask, addTask }: Props) {
return (
// タスク入力エリア
<div className="flex gap-2 mb-6">
{/* タスク入力フォーム */}
<input
type="text"
value={task}
// 入力値をstateと同期
onChange={(e) => setTask(e.target.value)}
// 入力された値をtask stateに保存
placeholder="タスクを入力"
className="border rounded px-3 py-2 w-full"
/>
{/* タスク追加ボタン */}
<button onClick={addTask}>
追加
</button>
</div>
);
}