📄【Next.js × SWR】孊習蚘録アプリにペヌゞネヌションを導入した話

📄【Next.js × SWR】孊習蚘録アプリにペヌゞネヌションを導入した話

投皿日: 2025幎05月14日

Tips
孊習振り返り
芁玄
  • ペヌゞネヌション機胜を導入し、孊習蚘録䞀芧画面のナヌザヌ䜓隓を向䞊させたした。
  • Next.jsずTypeScriptを䜿甚しお、デヌタをペヌゞ単䜍で分割衚瀺し、カスタムUIを実装したした。
  • これにより、可読性ず操䜜性が向䞊し、特にデヌタ量が倚い堎合のUX改善に寄䞎したした。

🎯 はじめに

孊習蚘録が増えおきたこずで、䞀芧画面が長くなりナヌザヌ䜓隓が䜎䞋しおいたした。そこで今回は、ペヌゞネヌションペヌゞ分割機胜を導入し、デヌタを分割しお衚瀺できるようにしたした。

📄【Next.js × SWR】孊習蚘録アプリにペヌゞネヌションを導入した話ShiftBブログ

🛠 技術スタック

  • フロント゚ンド: Next.js (App Router)

  • 状態管理 / デヌタ取埗: SWR

  • 型安党: TypeScript

  • UI: Radix UI + Tailwind CSS

  • コンポヌネント管理: LearningRecordTable.tsx, Pagination.tsx

🔧 実装抂芁

1. デヌタをペヌゞ単䜍で衚瀺するための凊理

䞀芧衚瀺しおいる records を゜ヌトし、ペヌゞ単䜍で .slice() を䜿っお分割衚瀺したす

const [currentPage, setCurrentPage] = useState(1);
const recordsPerPage = 10;

const paginatedRecords = sortedRecords.slice(
  (currentPage - 1) * recordsPerPage,
  currentPage * recordsPerPage
);

2. ペヌゞネヌションUIの䜜成

今回は、アプリのメむンカラヌであるピンクをベヌスにスタむルを調敎したカスタムUIを実装したした。

<button
  className={`w-8 h-8 rounded-full text-center border ${
    currentPage === i + 1
      ? "bg-pink-500 text-white border-pink-500"
      : "text-pink-700 border-pink-200 hover:bg-pink-100"
  }`}
>
  {i + 1}
</button>

前ぞ / 次ぞ ボタンも同様にアクセシビリティず芋た目を䞡立したスタむルにしおいたす。

3. ペヌゞ番号の状態管理

珟圚のペヌゞは useState で管理しおいたす

const [currentPage, setCurrentPage] = useState(1);

ペヌゞ切り替えのたびに再レンダリングされ、正しく records が反映されるようになっおいたす。

🎚 UIむメヌゞ

  • ペヌゞ数に応じたボタン衚瀺

  • 珟圚のペヌゞが色付きでハむラむト

  • 前埌ボタンで簡単にペヌゞ移動

  • レスポンシブ察応枈み

✹ たずめ

ペヌゞネヌションを远加するこずで、䞀芧画面の可読性ず操䜜性が向䞊したした。React + TailwindCSS の構成でも、少しの工倫で「䜿いやすく、芋やすいUI」を実珟できたす。特にデヌタ量が倚くなっおきた堎合、ペヌゞネヌションはUX向䞊のために欠かせない芁玠です。

シェア

Threads
user
さかした
おじさんでも孊べるをモットヌに。 以前はRuby(3幎)、今は React / Next.js を䞭心に、孊習䞭。
Loading...
蚘事䞀芧に戻る
Threads
0