切出目前頁
用 page、pageSize 與 slice 算出本頁三筆資料。
CHAPTER 22 · 180 MINUTES
資料很多時,不把整座書架倒出來;依頁碼切出一小段,再讓卡片、頁碼與按鈕同步。
LEARNING GOALS
用 page、pageSize 與 slice 算出本頁三筆資料。
只用一個 render 同步卡片、頁碼與控制狀態。
第一頁不能再上一頁,最後一頁不能翻到空白。
PROBLEM & ANALOGY
第 21 章已取得並正規化產品;本章完整陣列仍保留,只依 currentPage 算起點與終點,再用 slice 取得本頁。
本章要解決:頁碼、卡片與按鈕若各自更新,容易不同步或翻到空白頁。
合回共同作品:產品案例會成為作品集中的可操作資料頁。
SCOPE
page、pageSize、slice、totalPages、render 與 disabled。
offset 是從第幾筆開始;能代入數字,不要求背英文。
伺服器分頁、無限滾動、虛擬清單與 URL query 同步。
CORE IDEAS
(page - 1) * pageSize,終點是 start + pageSize。slice(start, end) 不包含 end,也不會改掉原陣列。DEBUGGING
課堂刻意錯誤:允許 currentPage 超過 totalPages,或只加灰色 class、沒有真的設定 disabled。
先查:印出 currentPage、start、end、totalPages,查頁碼是否越界。
先查:確認事件只改 page,再由同一個 render 更新畫面。
先查:檢查 disabled 屬性與事件條件。
PRACTICE CONTRACT
檔案:script.js
位置:getFilteredProducts()
結果:可以關鍵字、價格或兩者查找產品
檔案:script.js
位置:getPageItems()、render()
結果:查找結果每頁最多三筆,卡片與頁碼同步
檔案:script.js
位置:updateControls()
結果:首末頁按鈕正確停用,無查找結果時顯示 0 / 0 且兩鍵停用
EVIDENCE
目前第 ______ 頁,每頁 ______ 筆,start 是 ______、end 是 ______;totalPages 是 ______。
證據要包含無結果狀態;0 / 0 與兩個停用按鈕也是產品體驗的一部分。
錄下從第一頁翻到最後一頁的操作,畫面須同時看見產品、頁碼與停用按鈕;再口頭代入第二頁的 start、end。
下一章:從讀取產品轉向驗證使用者輸入並安全 POST。