Phần lớn dự án vừa và nhỏ chưa cần. Thứ tự leo thang nên theo:
1. useState ngay tại component dùng nó.
2. Lift state up — đưa lên cha chung gần nhất khi hai component anh em cần cùng dữ liệu.
3. Truyền props / composition — đưa JSX qua children để tránh chuỗi prop drilling dài.
4. Context cho vài giá trị ít đổi: theme, locale, user đăng nhập.
5. Thư viện chỉ khi có đủ tín hiệu: state client thật sự dùng chéo nhiều nhánh, cập nhật thường xuyên gây re-render diện rộng, hoặc cần đọc/ghi state từ ngoài React.
Dấu hiệu ngược lại rất quan trọng: nếu 80% state trong app là dữ liệu fetch từ API, thứ cần thêm là thư viện data-fetching chứ không phải store global. Sau khi đưa server state cho React Query, phần client state còn lại thường nhỏ tới mức useState là đủ.
Cũng đừng lưu derived state vào store: cái gì tính được từ state khác thì tính lúc render, đừng tạo thêm một biến rồi phải đồng bộ.