Có hai loại state khác nhau về bản chất:
- Client state (theme, sidebar đang mở, nội dung form) — client sở hữu hoàn toàn, cập nhật là thấy ngay, và không bao giờ "cũ".
- Server state (profile user, danh sách todo, catalog sản phẩm) — server sở hữu, người khác có thể sửa bất cứ lúc nào, phải đồng bộ liên tục, và luôn có khả năng đã cũ so với thực tế.
Redux nhét cả hai vào chung một store, thành ra phải tự dựng loading state, error state, normalization — phức tạp mà không cần thiết.
React Query tách hẳn ra: nó chỉ lo server state, kèm caching, background refetch, retry và deduplication. Client state để useState/useReducer/Zustand lo.
Kết quả thực tế ở hầu hết project: lượng code Redux giảm 50-80%.
Lưu ý: đừng nghĩ React Query là "global state" thay Redux — nó là lớp đồng bộ cache với server, hai vai trò khác nhau.