Các cách:
- (1) Manual: check trong onChange/onSubmit, lưu errors vào state.
- (2) HTML5 built-in: required, minLength, pattern attributes.
- (3) Formik + Yup: declarative schema validation.
- (4) React Hook Form với resolver (Yup, Zod).
Dùng Zod cho type-safe validation kết hợp TypeScript là best practice hiện đại.