React adotta deliberatamente un’impostazione funzionale: un componente è concepito come una funzione pura che restituisce un frammento di interfaccia in base alla coppia (state, props). In pratica il DOM virtuale generato rappresenta semplicemente UI = f(state, props). Poiché molti componenti non hanno realmente bisogno di mantenere stato, al forma più comune ed efficace è UI = f(props). In questi casi, il componente diventa idempotente (stesso input ⇒ stesso output) e l’albero di elementi prodotto è trattato come immutabile. Il termine props va inteso alla lettera: proprietà passate dal genitore, non variabili interne.
La scelta di fondare React sull’immutabilità offre vantaggi di chiarezza logica ed efficienza. Gli oggetti passati come props sono read-only per il componente che li riceve; lo state, invece, non è modificabile direttamente ma soltanto attraverso API dedicate (setState, useState, ecc.). In questo modo le funzioni di rendering rimangono pure: l’unico effetto collaterale è la produzione del markup, senza alterare dati esterni. La conseguenza pratica è duplice: