blog.dopana

Back

Quản lý state là một trong những vấn đề khó nhất trong frontend. Server state khác client state — mỗi loại có giải pháp riêng.

Client State vs Server State#

Client StateServer State
Theme, modal open/closeDữ liệu từ API
Form inputUser profile, posts
UI stateCache tồn tại trên server
Chỉ liên quan đến UICần sync với server

Redux Toolkit — Chuẩn Mực Cho State Phức Tạp#

Dùng khi: State phức tạp, nhiều reducer, middleware (saga, thunk), lớn hơn vài trăm component.

Zustand — Đơn Giản, Nhẹ#

Dùng khi: State vừa, muốn đơn giản, không muốn boilerplate.

Jotai — Atomic State#

Dùng khi: State phân tán, muốn atomic update, không cần store lớn.

TanStack Query (React Query) — Server State#

Giải pháp cho dữ liệu từ API — cache, refetch, stale management.

Dùng khi: Bất kỳ dự án nào gọi API — TanStack Query nên là mặc định cho server state.

So Sánh#

Thư việnClient/ServerBoilerplateBundle sizeKhi nào dùng
Redux ToolkitClientNhiều11KBApp lớn, state phức tạp
ZustandClientÍt1KBApp vừa, đơn giản
JotaiClientRất ít3KBState phân tán, atomic
TanStack QueryServerÍt13KBGần như mọi app

Pattern Thực Tế#

Kết Luận#

  • Server state: TanStack Query (React Query) — mặc định cho mọi dự án
  • Client state phức tạp: Redux Toolkit hoặc Zustand
  • Client state đơn giản: useState/useContext là đủ
  • Form state: React Hook Form (không phải state management)

Không cần Redux cho mọi project. Hầu hết app chỉ cần TanStack Query + useState + vài Zustand store nhỏ.

Tài liệu tham khảo#