Thanks for your kind words!
Yes, I'm aware that the "useState" example could have been easier. The reducer method could also be used, but it still results in unnecessary re-renders, and it actually appears to bloat the code up even more, as in the example.
My aim was to point out patterns that I've often seen (in the workplace and on the React docs) that are unnecessarily complicated. I especially see the "useState" example everywhere in professional codebases. I was showing the flawed approaches so that I could highlight the better approach.
Totally agree that state makes side effects easier! The trick is to know when state is actually needed. (For instance, you can filter inputs without state.) Where state is needed, I've found React Hook Form really helpful! It pretty much only throws in state when you need it, which is significantly different from Formik's approach.
A more accurate title could have been "You Don't Need Controlled Inputs". But not every React dev knows what that means.