# State Ownership Heuristics ## Choose the owner, then the tool | Kind of state | Default owner | Typical tool | | --- | --- | --- | | Editable form fields | Component | `useState` | | Shared mutable app data | Redux | Slice state | | Server cache | RTK Query | `createApi` | | URL, pathname, search params | Router | Router APIs plus selector inputs | | Browser-only authority like `localStorage` | External source | Read at boundaries, then dispatch events | ## Good reasons to move data into Redux - Multiple distant parts of the UI need the same mutable data. - You need time-travel debugging or a stable action history. - The reducer should own transitions because they mix old store state with new inputs. ## Reasons to keep data out of Redux - Another system already owns it, such as the router. - It only matters during editing inside one component tree. - It is server cache and RTK Query fits the use case better. ## Re-evaluate slice size - If data is constantly stitched together outside reducers, it may belong closer together. - If unrelated updates keep touching the same slice, split the slice by domain ownership.