Start here. This is the direct spoken answer to practice first.
Why this question matters
List pages look ordinary, but they are one of the densest full-stack features. The UI, API, and database all need to agree on filtering, sorting, pagination, and state persistence.
I would keep list state in the URL query string so the page is shareable and survives refresh. The UI reads search, filters, sort, and page cursor from the URL and calls an API endpoint with explicit query parameters. The API validates allowed filters and sort fields, applies stable ordering, returns items plus paging metadata, and the UI renders loading, empty, and error states without losing the current filter state.