ðãNext.js à SWRãåŠç¿èšé²ã¢ããªã«ããŒãžããŒã·ã§ã³ãå°å ¥ãã話
æçš¿æ¥: 2025幎05æ14æ¥
åŠç¿èšé²ãå¢ããŠããããšã§ãäžèЧç»é¢ãé·ããªããŠãŒã¶ãŒäœéšãäœäžããŠããŸãããããã§ä»åã¯ãããŒãžããŒã·ã§ã³ïŒããŒãžåå²ïŒæ©èœãå°å ¥ããããŒã¿ãåå²ããŠè¡šç€ºã§ããããã«ããŸããã
ããã³ããšã³ã: Next.js (App Router)
ç¶æ 管ç / ããŒã¿ååŸ: SWR
åå®å š: TypeScript
UI: Radix UI + Tailwind CSS
ã³ã³ããŒãã³ã管ç: LearningRecordTable.tsx
, Pagination.tsx
äžèŠ§è¡šç€ºããŠãã records
ããœãŒãããããŒãžåäœã§ .slice()
ã䜿ã£ãŠåå²è¡šç€ºããŸãïŒ
const [currentPage, setCurrentPage] = useState(1);
const recordsPerPage = 10;
const paginatedRecords = sortedRecords.slice(
(currentPage - 1) * recordsPerPage,
currentPage * recordsPerPage
);
ä»åã¯ãã¢ããªã®ã¡ã€ã³ã«ã©ãŒã§ãããã³ã¯ãããŒã¹ã«ã¹ã¿ã€ã«ã調æŽããã«ã¹ã¿ã 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>
åãž / 次ãž
ãã¿ã³ãåæ§ã«ã¢ã¯ã»ã·ããªãã£ãšèŠãç®ãäž¡ç«ããã¹ã¿ã€ã«ã«ããŠããŸãã
çŸåšã®ããŒãžã¯ useState
ã§ç®¡çããŠããŸãïŒ
const [currentPage, setCurrentPage] = useState(1);
ããŒãžåãæ¿ãã®ãã³ã«åã¬ã³ããªã³ã°ãããæ£ãã records
ãåæ ãããããã«ãªã£ãŠããŸãã
ããŒãžæ°ã«å¿ãããã¿ã³è¡šç€º
çŸåšã®ããŒãžãè²ä»ãã§ãã€ã©ã€ã
ååŸãã¿ã³ã§ç°¡åã«ããŒãžç§»å
ã¬ã¹ãã³ã·ãå¯Ÿå¿æžã¿
ããŒãžããŒã·ã§ã³ã远å ããããšã§ãäžèЧç»é¢ã®å¯èªæ§ãšæäœæ§ãåäžããŸãããReact + TailwindCSS ã®æ§æã§ããå°ãã®å·¥å€«ã§ã䜿ãããããèŠãããUIããå®çŸã§ããŸããç¹ã«ããŒã¿éãå€ããªã£ãŠããå ŽåãããŒãžããŒã·ã§ã³ã¯UXåäžã®ããã«æ¬ ãããªãèŠçŽ ã§ãã
Webã«ããããã¶ã€ã³ã®ã³ã
ãªãªãžãã«ã¢ããªå¥®éèš
èªåæ ç±å€§éžã-æè¬ãäŒããããšæããæžããŸãã-
å人éçºã®ã¢ãããŒã·ã§ã³ç¶æ(TAã®ãããã)
ãŸãããã粟ç¥ã®æ³šæç¹
ã¿ããªçé¢ç®éããïŒãŸãããã粟ç¥ã®ããã
å®è£ ã§ããã¬ãã«ã®ç²åºŠã«ã¿ã¹ã¯ãåè§£ããæ¹æ³
å人éçºã®ã¢ããªéçºã§GitHub Projectsã䜿ã£ããã±ããç®¡çæ¹æ³
ã13ç« ãå®åäœéšèª²é¡ã®ææ³
Codex䜿ã£ãŠã¿ãå ±å
ð ãã°ã€ã³ç¶æ ã®ä¿åæ¹æ³ãåãæ¿ãããããã°ã¢ãŠãã§ããªããªã£ã話
ð ãã°ã€ã³ç¶æ ã®ä¿æããŠãŒã¶ãŒãéžã¹ãããã«ãã話ãLernova éçºèšã