Hãy khớp công cụ với loại state, thay vì mặc định với một store toàn cục. Hầu hết vấn đề "state toàn cục" thực ra là dùng sai công cụ cho công việc.
Hướng dẫn quyết định
text
State UI cục bộ (toggle, input) → useState / useReducer
Chia sẻ, ít thay đổi (theme, user) → Context
Dữ liệu Server/API → React Query / SWR (KHÔNG phải store toàn cục)
State client toàn cục phức tạp → Zustand / Jotai / Redux Toolkit
State chia sẻ qua URL (filter, page)→ URL (search params)
Insight quan trọng nhất: server state ≠ client state
Dữ liệu từ một API là một cache của dữ liệu từ xa, không phải state bạn sở hữu. Đặt nó vào Redux nghĩa là bạn tự xử lý loading, caching, refetch và vô hiệu hóa — đau đớn và dễ lỗi. Một thư viện server-state làm tất cả việc đó:
