Paghahandle ng pagination at sorting

Huling na-update: 3 buwan ang nakalipas

Ibinabalik ng API ang mga resulta ng paghahanap sa mga pahina. Narito kung paano mahusay na mag-navigate sa malalaking set ng resulta.

Pangunahing pagination

POST /resources
{
  "query": "saints",
  "page": 1,
  "page_size": 20
}
Response:
{
  "total": 1523,
  "page": 1,
  "page_size": 20,
  "results": [ ... 20 items ... ]
}

Sinasabi sa iyo ng response na may kabuuang 1,523 na resulta, at tinitingnan mo ang page 1 na may 20 item.

Pagkalkula ng kabuuang bilang ng mga pahina

const totalPages = Math.ceil(response.total / response.page_size);
// 1523 / 20 = 76.15 → 77 pages

Paglo-load ng susunod na pahina

// Simpleng susunod na pahina
currentPage++;
// O buuin ang pagination UI
for (let page = 1; page <= totalPages; page++) {
  // Gumawa ng button ng pahina
}

Pag-o-optimize ng page size

Piliin ang page size batay sa iyong sitwasyon ng paggamit:

Maliliit na pahina (10-20 item):

  • Mas mabilis ang unang pag-load

  • Maganda para sa paghahanap na nakikita ng user

  • Kailangan ng mas maraming kahilingan sa API

Malalaking pahina (50-100 item):

  • Mas kaunting kahilingan sa API

  • Maganda para sa batch processing

  • Mas mabagal ang mga indibidwal na kahilingan

  • Ang maximum ay 100 item

Mga opsyon sa sorting

Popular (default):

{
  "order": "popular"
}

Ibinabalik muna ang mga pinaka-na-download na resources. Pinakamainam para sa pagpapakita ng de-kalidad at napatunayang content.

Kamakailan lang:

{
  "order": "recent"
}

Ibinabalik muna ang pinakabagong mga upload. Maganda para sa pagtuklas ng sariwang content.

Halimbawa ng infinite scroll

let currentPage = 1;
const pageSize = 20;
let isLoading = false;
let hasMore = true;
async function loadMore() {
  if (isLoading || !hasMore) return;
  
  isLoading = true;
  
  const response = await fetch('https://api.cathopic.com/resources', {
    method: 'POST',
    headers: {
      'x-api-key': apiKey,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      query: 'prayer',
      page: currentPage,
      page_size: pageSize,
      order: 'popular'
    })
  });
  
  const data = await response.json();
  
  // Idagdag ang mga resulta sa iyong UI
  appendResults(data.results);
  
  // Suriin kung may mga susunod pang pahina
  const totalPages = Math.ceil(data.total / pageSize);
  hasMore = currentPage < totalPages;
  
  currentPage++;
  isLoading = false;
}
// I-trigger kapag nag-scroll
window.addEventListener('scroll', () => {
  if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 500) {
    loadMore();
  }
});

Mga tip sa performance

  • I-cache ang mga resulta nang lokal para maiwasan ang paulit-ulit na kahilingan

  • Gumamit ng angkop na page sizes para sa iyong sitwasyon ng paggamit

  • Ipatupad ang loading states para sa mas magandang UX

  • Isaalang-alang ang virtualization para sa napakalalaking listahan

  • Huwag kunin ang lahat ng pahina nang sabay - mag-load kapag kailangan

Para sa higit pang detalye, tingnan ang buong dokumentasyon sa api.cathopic.com/docs.

Nakatulong ba ang artikulong ito?