Frameworks & Reactivity
React, Vue, Svelte, Solid and Angular as different answers to the same questions: how change is detected, how much work is compile-time, and what reaches the DOM.
Re-run and diff, tracked proxies, compile-time analysis, fine-grained signals, zone-based change detection: five ways of finding out that something changed.
State and props go in, the component function runs and returns a description of the UI, a reconciler compares descriptions, and the difference becomes DOM calls.
Reactive state records who read it. A component re-renders when a reactive value it actually read during its last render has changed — not because its parent did.
A compiler reads your component, works out which parts of the markup depend on which values, and emits code that updates exactly those parts.
The component function runs once. Signals hold values with subscriber lists, and setting one re-runs only the small computations that read it — each writing to the node it owns.
An integrated framework rather than a view library: components and templates, dependency injection, routing, forms and a build system, shipped and versioned together.
Deciding what changed between one UI state and the next comes down to identity: which node in the new list is the same thing as which node in the old one.
There is no winner. There are constraints — team, existing code, hiring, rendering strategy, bundle budget, support horizon — and the framework that fits the most of yours.