Dùng Redux khi:
1. State dùng chung ở nhiều component nằm xa nhau — ví dụ thông tin auth cần có mặt đồng thời ở Header, Sidebar, Feed và Modal.
2. Logic state phức tạp với nhiều action tác động lẫn nhau — giỏ hàng có coupon, giảm giá, thuế, phí ship tính chồng lên nhau.
3. Cần lịch sử action hoặc audit trail — app tài chính, app soạn thảo cộng tác cần biết ai làm gì lúc nào.
4. Team đã quen Redux trên codebase lớn — chi phí migration cao hơn lợi ích thu về.
Không dùng Redux khi:
1. Phần lớn là server state — dùng React Query, ném server data vào Redux là over-engineering.
2. State chỉ nằm trong một hai component — useState là đủ.
3. App nhỏ hoặc team còn mới — learning curve của Redux + RTK không đáng.
Các lựa chọn khác: Zustand cho global client state đơn giản (~8KB, gần như không boilerplate), Jotai cho atomic state fine-grained, React Query cho server state (thay được chừng 80% use case vốn hay nhét vào Redux), Context API cho thứ ít đổi như theme hay locale.
Nguyên tắc chung: nếu bạn đang viết Redux chủ yếu để cache data API, hãy đổi sang React Query. Redux nên co lại đúng phần UI state thật sự toàn cục: auth, giỏ hàng, tuỳ chọn thông báo.