🧠 概要
Next.jsのApp Router構成に対応するため、
フロント中心のstate管理から「APIベースの設計」に変更した。
🎯 初学者向けに一言
Next.jsでは「サーバーでやるか、ブラウザでやるか」を分けるのが重要
🧱 ① API Routeの実装
// app/api/tasks/route.ts
// タスク一覧(仮DB)
let tasks: any[] = [];
// GET: タスク一覧取得
export async function GET() {
// tasks配列をJSONとして返す
return Response.json(tasks);
}
// POST: タスク作成
export async function POST(req: Request) {
// リクエストボディを取得
const body = await req.json();
// バリデーション(textがない場合はエラー)
if (!body.text) {
return Response.json(
{ error: "invalid" },
{ status: 400 }
);
}
// 新しいタスクを作成
const newTask = {
id: Date.now(), // 一意なID
text: body.text, // タスク内容
tag: body.tag, // タグ
};
// 配列に追加(仮DB)
tasks.push(newTask);
// 作成したタスクを返す
return Response.json(newTask);
}
💡 ポイント
・Next.jsはAPIも同じプロジェクトで作れる
・簡易バックエンドとして使える
🧱 ② Client ComponentでPOST
"use client"; // ← このファイルはブラウザで動く
// タスク追加関数
const addTask = async () => {
// APIにPOSTリクエストを送る
await fetch("/api/tasks", {
method: "POST",
body: JSON.stringify({
text: task, // 入力されたタスク
tag: tag, // 入力されたタグ
}),
});
// 🔥 重要:APIから再取得
await fetchTasks();
};
💡 ポイント
・setStateで直接追加しない
・必ずAPIを通す
🧱 ③ 再フェッチ処理