0
0
GraphQLquery~10 mins

Cursor-based pagination in GraphQL - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Cursor-based pagination
Start Query with cursor=null
Fetch first N items after cursor
Return items + new cursor
User requests next page with new cursor
Repeat fetch with updated cursor
Stop when no more items
Cursor-based pagination fetches a set number of items after a given cursor, returning a new cursor for the next page until no more items remain.
Execution Sample
GraphQL
query {
  posts(first: 3, after: "cursor123") {
    edges {
      node { id title }
      cursor
    }
    pageInfo { hasNextPage endCursor }
  }
}
Fetch 3 posts after the cursor 'cursor123', returning posts and info for next page.
Execution Table
StepInput CursorActionItems FetchedNew CursorHas Next Page
1nullFetch first 3 posts from start[Post1, Post2, Post3]cursor3true
2cursor3Fetch next 3 posts after cursor3[Post4, Post5, Post6]cursor6true
3cursor6Fetch next 3 posts after cursor6[Post7]cursor7false
4cursor7No more posts after cursor7[]nullfalse
💡 No more items after cursor7, pagination ends.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4
input_cursornullcursor3cursor6cursor7null
items_fetched[][Post1, Post2, Post3][Post4, Post5, Post6][Post7][]
has_next_pagefalsetruetruefalsefalse
Key Moments - 3 Insights
Why do we use a cursor instead of page numbers?
Cursor points to a specific item, so pagination is stable even if data changes. See execution_table steps 1-3 where cursor moves forward instead of page numbers.
What happens if the cursor is null at the start?
It means fetch from the beginning. Execution_table step 1 shows input_cursor null fetches first items.
Why does the last fetch return fewer items?
Because fewer items remain than requested. Step 3 fetches only one post, showing end of data.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the input_cursor at Step 2?
Acursor6
Bnull
Ccursor3
Dcursor7
💡 Hint
Check the 'Input Cursor' column at Step 2 in execution_table.
At which step does hasNextPage become false?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at the 'Has Next Page' column in execution_table to find when it changes to false.
If we change the first fetch to 5 items, how would items_fetched at Step 1 change?
AIt would fetch 5 posts instead of 3
BIt would fetch 3 posts as before
CIt would fetch no posts
DIt would fetch all posts
💡 Hint
Refer to the code sample where 'first: 3' controls number of items fetched.
Concept Snapshot
Cursor-based pagination:
- Uses a cursor to mark position in data
- Query fetches items after cursor
- Returns items + new cursor for next page
- Stable with data changes
- Stops when no more items
Full Transcript
Cursor-based pagination is a way to get data in chunks using a cursor that points to a specific item. We start with no cursor to get the first items. Each response gives a new cursor to fetch the next chunk. This continues until no more items are left. This method is better than page numbers because it handles data changes smoothly. The example query fetches posts after a cursor, returning edges with nodes and cursors, plus page info. The execution table shows how the cursor moves forward and when pagination ends.