Chia theo nguồn sở hữu dữ liệu, không chia theo "global hay local". Bốn nhóm hay gặp:
- Server state — dữ liệu thuộc về backend, client chỉ giữ bản sao có thể cũ: danh sách đơn hàng, hồ sơ user. Đặc trưng: bất đồng bộ, có thể stale, cần cache/refetch/invalidate. Công cụ: React Query / RTK Query / SWR.
- Client state (UI state) — chỉ tồn tại ở trình duyệt: modal đang mở, tab đang chọn, theme, giỏ hàng tạm. Công cụ:
useState→ lift state → Zustand / Jotai / Redux khi nhiều nhánh cây cùng đọc. - URL state — bộ lọc, từ khoá tìm kiếm, số trang, id đang xem. Để trên
searchParamsthì link chia sẻ được, F5 không mất, nút back hoạt động đúng. - Form state — giá trị đang gõ,
touched,dirty, lỗi validate. Để cục bộ trong form (react-hook-formhoặc uncontrolled), chỉ đẩy ra ngoài khi submit.
Lỗi phổ biến khi trả lời: gộp tất cả vào một store global. Nhét server state vào Redux là tự viết lại cache, loading, retry, invalidate — phần khó nhất của bài toán.