Reaching for React by default, even for a mostly-static page with a sprinkle of interactivity, is a common and often costly over-engineering pattern — the right call depends on what you’re actually building.
When Vanilla JavaScript Is Enough
- A handful of interactive widgets on an otherwise static page (a form, a dropdown, a modal)
- Content-heavy sites where SEO and fast initial load matter more than rich interactivity
- Small internal tools with a short lifespan
When React (or Similar) Genuinely Pays Off
- Complex, deeply interactive UI with many interdependent pieces of state
- A team that benefits from component reuse and a shared, enforced structure
- An application, not a document — something closer to a desktop app than a web page
The tell that you’ve picked wrong in either direction: hand-rolling a React-shaped state management system in vanilla JS for a genuinely complex app (reinventing a worse React), or shipping a multi-hundred-KB framework bundle to render three paragraphs and a button.