You're right! You can do either.
FormData:
- Works without JS as browsers natively support form submissions without js. Hense why form submissions here are server side.
- Handle file uploads natively (pretty sure)
- Better nexjs integration. Prefetching / loading / etc. (but this isn't really good argument)
- Lighter bundle. i.e doesn't need client side validation libs like zod.
RHF + Zod:
- End to end type safety.
- Better dev experience-- No need for manual formData parsing in example.
- Rich Validation-- Meaning you can better validate client to server side with detailed error messages.
- Better Form State Management especially for large projects.
I often end up using rhf + zod for medium+ sized projects as in terms of long terms dev experience it's much more efficient for me.
For any small projects to get things done, I use next's native form.