Skip to content

<ReactListSummary> ​

This component provides metadata about the current list view — great for showing things like:

Showing 11–20 of 154 results

It gives you full control over rendering, so you can use it for any custom summary UI.

Behavior ​

The component will return null (render nothing) in the following cases:

  • During initial loading (initialLoading is true)
  • When there are no items (data.length === 0)
  • When there is an error

Props ​

NameTypeDescription
childrenFunctionReactNode Optional. Custom content to display. Can be a function that receives the scope object, or a React element

Usage ​

With React children ​

Simply pass any React content as children to display the summary:

jsx
<ReactList endpoint="users" perPage={10}>
  <ReactListSummary>
    <span>Custom summary text</span>
  </ReactListSummary>
  
  <ReactListItems>
    {({ items }) => (
      <div>
        {items.map((item) => (
          <div key={item.id}>{item.name}</div>
        ))}
      </div>
    )}
  </ReactListItems>
</ReactList>

With children as function ​

Use children as a function to access the summary data:

jsx
<ReactList endpoint="users" perPage={10}>
  <ReactListSummary>
    {({ from, to, visibleCount, count }) => (
      <div>
        Showing {visibleCount} items ({from} - {to}) out of {count}
      </div>
    )}
  </ReactListSummary>
  
  <ReactListItems>
    {({ items }) => (
      <div>
        {items.map((item) => (
          <div key={item.id}>{item.name}</div>
        ))}
      </div>
    )}
  </ReactListItems>
</ReactList>

children callback Props ​

NameTypeDescription
fromNumberStarting index of the current page (calculated as page * perPage - perPage + 1)
toNumberEnding index of the current page (calculated as Math.min(page * perPage, count))
visibleCountNumberNumber of items currently visible on the page (same as data.length)
countNumberTotal number of items matching the current query (from API response)

Calculation Details ​

The summary values are calculated as follows:

  • from: page * perPage - perPage + 1
    • Example: Page 2 with 10 per page = 2 * 10 - 10 + 1 = 11
  • to: Math.min(page * perPage, count)
    • Example: Page 2 with 10 per page and 25 total = Math.min(20, 25) = 20
  • visibleCount: data.length (number of items in current page)
  • count: Total count from API response

Default behavior ​

If no children are provided, the component will render a default summary:

jsx
<ReactListSummary />
// Renders: "Showing <visibleCount> items (<from> - <to>) out of <count>"

Example Usage ​

jsx
<ReactList endpoint="products" perPage={25}>
  <div className="list-header">
    <ReactListSummary>
      {({ from, to, count }) => (
        <span className="results-count">
          {count > 0 ? (
            <>Showing {from}-{to} of {count} products</>
          ) : (
            <>No products found</>
          )}
        </span>
      )}
    </ReactListSummary>
  </div>
  
  <ReactListItems>
    {({ items }) => (
      <div className="products-grid">
        {items.map((product) => (
          <ProductCard key={product.id} product={product} />
        ))}
      </div>
    )}
  </ReactListItems>
</ReactList>