ðã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åäžã®ããã«æ¬ ãããªãèŠçŽ ã§ãã

TAã®äœ¿ãæ¹ãšãã€ã³ãã»ãã
Webã«ããããã¶ã€ã³ã®ã³ã
ãªãªãžãã«ã¢ããªå¥®éèš
èªåæ ç±å€§éžã-æè¬ãäŒããããšæããæžããŸãã-
å人éçºã®ã¢ãããŒã·ã§ã³ç¶æ(TAã®ãããã)
MBTIÃåŠç¿ã¹ã¿ã€ã«ãå·šå ã®ç§ãçŽ4ã¶æã§å®èµ°ããåŠç¿æŠç¥
ã1ç« ãäºåæºåã®æ¯ãè¿ã
ã2ç« ãWebã¢ããªã±ãŒã·ã§ã³æŠèŠã®æ¯ãè¿ã
ãReact åå¿è åããããŒã¿ååŸããã£ãšåããããããªããTanStack Query ã®ç޹ä»
å³ã§çè§£!!䞊å(Concurrency)䞊è¡(Parallelism)ã®éã
ãã¬ã€ãã³ã·ã£ãŠäœïŒïŒïŒãããå§ãã調æ»ã楜ããã£ã話
5ç« æ¯ãè¿ããš12æã®ç®æšèšå®