This article is a sponsored by SurveyJS There’s a mental model most React developers share without ever discussing it out loud. That forms are *always* supposed to be components. This means a stack like: - **React Hook Form** for local state (minimal re-renders, ergonomic field registration, imperative interaction). - **Zod** for validation (input correctness, boundary validation, type-safe parsing). - **React Query** for backend: submission, retries, caching, server sync, and so on. And for the vast majority of forms — your login screens, your settings pages, your CRUD modals — this works really well. Each piece does its job, they compose cleanly, and you can move on to the parts of your application that actually differentiate your product. But every once in a while, a form starts accumulating things like visibility rules that depend on earlier answers, or derived values that cascade through three fields. Maybe even entire pages that should be skipped or shown based on a running total.…