Skip to content

<ReactListInitialLoader> ​

This component is for the very first load — when the list has not yet received any data. This is useful to show a skeleton loader or shimmer when the user first visits the page.

Behavior ​

The component will return null (render nothing) when initialLoading is false. It only renders during the initial data fetch, before any items have been loaded.

Props ​

NameTypeDescription
childrenReactNodeOptional. Custom content to display during initial loading. 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 during the initial load:

jsx
<ReactList endpoint="users">
  <ReactListInitialLoader>
    <div className="skeleton-loader">
      <div className="skeleton-header"></div>
      <div className="skeleton-body">
        {[...Array(5)].map((_, i) => (
          <div key={i} className="skeleton-row"></div>
        ))}
      </div>
    </div>
  </ReactListInitialLoader>
  
  <ReactListItems>
    {({ items }) => (
      <div>
        {items.map((item) => (
          <div key={item.id}>{item.name}</div>
        ))}
      </div>
    )}
  </ReactListItems>
</ReactList>

With children as function ​

You can also use children as a function to access the loading state:

jsx
<ReactList endpoint="users">
  <ReactListInitialLoader>
    {({ loading }) => (
      <div className="initial-loader">
        {loading && (
          <div className="spinner">
            <p>Loading initial data...</p>
          </div>
        )}
      </div>
    )}
  </ReactListInitialLoader>
  
  <ReactListItems>
    {({ items }) => (
      <div>
        {items.map((item) => (
          <div key={item.id}>{item.name}</div>
        ))}
      </div>
    )}
  </ReactListItems>
</ReactList>

children callback Props (when used as function) ​

NameTypeDescription
loadingBooleantrue during initial loading, false once data has been loaded

Default behavior ​

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

jsx
<ReactListInitialLoader />
// Renders: <p>Initial Loading...</p>

Example: Skeleton Loader ​

jsx
<ReactList endpoint="posts" perPage={10}>
  <ReactListInitialLoader>
    <div className="skeleton-container">
      <div className="skeleton-table">
        <div className="skeleton-header">
          <div className="skeleton-cell header"></div>
          <div className="skeleton-cell header"></div>
          <div className="skeleton-cell header"></div>
        </div>
        <div className="skeleton-body">
          {[...Array(5)].map((_, index) => (
            <div className="skeleton-row" key={index}>
              <div className="skeleton-cell"></div>
              <div className="skeleton-cell"></div>
              <div className="skeleton-cell"></div>
            </div>
          ))}
        </div>
      </div>
    </div>
  </ReactListInitialLoader>
  
  <ReactListItems>
    {({ items }) => (
      <table>
        <thead>
          <tr>
            <th>Title</th>
            <th>Author</th>
            <th>Date</th>
          </tr>
        </thead>
        <tbody>
          {items.map((post) => (
            <tr key={post.id}>
              <td>{post.title}</td>
              <td>{post.author}</td>
              <td>{post.date}</td>
            </tr>
          ))}
        </tbody>
      </table>
    )}
  </ReactListItems>
</ReactList>