Discover how breaking data into pages can turn a slow app into a lightning-fast experience!
Why Connection pattern (edges, nodes, pageInfo) in GraphQL? - Purpose & Use Cases
Imagine you have a huge list of friends on a social app. You want to show them page by page, but you try to load all at once in a simple list.
This makes your app slow and confusing because it tries to handle too much data at once.
Loading all data manually means waiting a long time and using lots of memory.
It's easy to make mistakes like missing some friends or showing duplicates.
Also, scrolling through a long list without clear pages is frustrating for users.
The connection pattern breaks the list into small, easy-to-handle pages.
It uses edges to hold each friend with extra info, nodes for the actual friend data, and pageInfo to know if more pages exist.
This makes loading fast, smooth, and reliable.
query { friends { id name } }query { friendsConnection(first: 5, after: "cursor") { edges { node { id name } } pageInfo { hasNextPage endCursor } } }This pattern lets apps load data bit by bit, making user experience fast and smooth even with huge lists.
On a shopping site, showing product reviews page by page so users can easily browse without waiting for all reviews to load at once.
Manual loading of big lists is slow and error-prone.
Connection pattern organizes data into edges, nodes, and pageInfo for easy paging.
This makes apps faster and user-friendly when handling large data sets.
Practice
pageInfo field in the GraphQL connection pattern?Solution
Step 1: Understand the role of
ThepageInfopageInfofield contains metadata about pagination such as whether there are more pages available.Step 2: Differentiate from
Unlikeedgesandnodesedgesornodeswhich hold data items,pageInfoonly provides pagination status.Final Answer:
To provide information about pagination like if there are more pages -> Option CQuick Check:
pageInfo = pagination info [OK]
- Confusing pageInfo with nodes or edges
- Thinking pageInfo holds actual data items
- Ignoring pagination metadata role
edges and node fields in a GraphQL connection?Solution
Step 1: Recall correct field names in connection pattern
The connection pattern usesedges(plural) and inside each edge anode(singular) holds the data.Step 2: Check each option's syntax
{ users { edges { node { id name } } } }correctly usesedgesandnode.{ users { nodes { id name } } }usesnodeswhich is valid but not with edges.{ users { pageInfo { hasNextPage } } }queries only pageInfo.{ users { edge { node { id name } } } }usesedgesingular which is incorrect.Final Answer:
{ users { edges { node { id name } } } } -> Option DQuick Check:
edges plural, node singular inside edges [OK]
- Using 'edge' instead of 'edges'
- Mixing nodes and edges syntax
- Querying pageInfo instead of data fields
{ posts(first: 2) { edges { cursor node { id title } } pageInfo { hasNextPage } } }And the server returns two posts with ids 101 and 102, what will
pageInfo.hasNextPage be if there are more posts after these two?Solution
Step 1: Understand the meaning of
hasNextPagehasNextPageis true if more items exist beyond the current page.Step 2: Apply to given scenario
Since the server returns 2 posts but more posts exist after them,hasNextPagemust be true.Final Answer:
true -> Option AQuick Check:
More posts after current page means hasNextPage = true [OK]
- Assuming hasNextPage is false when items equal page size
- Confusing hasNextPage with hasPreviousPage
- Expecting null or undefined instead of boolean
{ comments { edge { node { id text } } } }But it returns an error. What is the likely cause?
Solution
Step 1: Check the connection field names
The connection pattern usesedges(plural) notedge(singular).Step 2: Identify the error cause
Usingedgecauses a field not found error because the schema expectsedges.Final Answer:
The field should be 'edges' not 'edge' -> Option BQuick Check:
edges plural required, edge singular causes error [OK]
- Using 'edge' instead of 'edges'
- Thinking 'node' should be plural
- Assuming pageInfo is mandatory for query success
Solution
Step 1: Understand the difference between nodes and edges
nodesgives a simple list of items without pagination details, whileedgesincludes cursors for pagination.Step 2: Choose the query matching the need
Since pagination info is not needed, queryingnodesdirectly is simpler and efficient.Final Answer:
{ products { nodes { id name } } } -> Option AQuick Check:
Use nodes for simple list without pagination [OK]
- Using edges and pageInfo when not needed
- Querying only pageInfo without data
- Ignoring simpler nodes field for lists
Ready to prove it?
Pass the test and this pattern moves unknown
