Scroll pagination

You can use getScrollSchema (or useScrollQuery) to scroll through a cursor-based or offset-based resource.

getScrollSchema(scroller, fetcher, cooldown?, timeout?)
useScrollQuery(scroller, fetcher, cooldown?, timeout?)

Behaviour

query.scroll() will fetch the next page.

query.fetch() will fetch the first page (next pages will be discarded if the first page changed).

Scroller function

A scroller function uses the previous page data and returns the next page key.

type Scroller<D = any, K = any> = (previous?: D) => K | undefined

If you use useScrollQuery, the scroller must be memoized as it acts like a key, you can create one with a useCallback or use a top-level function.

Cursor-based example

function getHelloSchema() {
return getScrollSchema((previous?: MyData) => {
if (!previous)
return `/api/hello` // <--- no previous data = first page
if (!previous.after)
return undefined // <--- no after cursor = last page
return `/api/hello?after=${previous.after}`
}, fetchAsJson)
}
function useHello() {
const query = useQuery(getHelloSchema, [])
useFetch(query) // <-- all blocks are compatible
return query
}