The question "which state library should we use?" usually means the state hasn't been categorised yet. Once it is, most of it has an obvious home that isn't a store.
Server state
Data that lives in a database and is merely being displayed. This is the majority of state in most applications, and it isn't really client state at all — it's a cache of something else.
In an App Router app this mostly stops being state entirely: you fetch it on the server and render it. Where you do need it on the client, a query cache is the right tool, because the hard parts are revalidation and deduplication, not storage.
URL state
Filters, search terms, pagination, the currently open tab. The test is simple: if a user would reasonably expect to share this in a link, it belongs in the URL.
Putting it in a store instead is how you end up with a filtered list that can't be bookmarked and a back button that does nothing. Search params are also free persistence and free server-side rendering.
Local UI state
Is the dropdown open. What's typed in the input. Which item is hovered. This is what useState is for, and it should live as close to the element as possible. Lifting it "in case something else needs it" is how components become untestable.
Genuinely shared client state
What's left is small: theme preference, an authenticated user, the contents of a cart before checkout. It's shared across distant parts of the tree and it's genuinely client-owned.
This is the only category where a store earns its place — and for most of these, context plus a reducer is enough. The reason to reach for a library here is a specific one: you need fine-grained subscriptions because a context re-render is measurably too expensive.
The actual point
The reason this matters isn't purity. It's that miscategorised state is the source of most React bugs I debug. Server data in a store goes stale. URL state in a store breaks navigation. Local state lifted too high causes re-renders nobody can trace.
Put each kind where it belongs and the remaining problem is usually small enough not to need a solution.