Per le piccole interazioni (un menu, un contatore, un toggle) non serve React. Stimulus, parte di Hotwire, collega comportamenti JavaScript all'HTML tramite data-attribute.
<div data-controller="clipboard">
<input data-clipboard-target="source" value="ciao">
<button data-action="click->clipboard#copy">Copia</button>
</div>
// clipboard_controller.js
import { Controller } from "@hotwired/stimulus";
export default class extends Controller {
static targets = ["source"];
copy() {
navigator.clipboard.writeText(this.sourceTarget.value);
}
}
L'HTML dichiara cosa fa (il controller, i target, le action); il JavaScript dice come. Stimulus non genera l'HTML, si aggancia a quello che c'è già, anche a quello arrivato via Turbo.
Filosofia opposta a React: l'HTML resta il protagonista, il JavaScript è un condimento leggero. Per un'app Rails, spesso è tutto ciò che serve.