Start here. This is the direct spoken answer to practice first.
Why this question matters
Many React problems are ownership problems presented as library choices. Putting every value in one global store can be as fragile as hiding shared workflow state deep inside a leaf component.
I place state with the smallest owner that needs to coordinate it. Temporary input or an open panel can stay local. State shared by nearby siblings can move to their nearest common parent. Filters, sorting, pagination, or a selected record belong in the URL when users need refresh, back and forward navigation, or shareable links. Remote records belong in a server-data cache, while a shared store is useful for client state that spans distant features and has a clear lifecycle.