React koristim godinama, do te mjere da je postao refleks: novi projekt, create-next-app, idemo. Krajem proljeća odlučio sam napraviti eksperiment — mjesec dana ni linije Reacta, na tri stvarna mala projekta. Ne iz mržnje prema Reactu, nego iz sumnje da više ne znam razlikovati kad ga trebam od kad ga navlačim iz navike.
Pravila eksperimenta
Tri projekta koja bih inače bez razmišljanja radio u Reactu: landing stranica s formom, interni dashboard koji prikazuje podatke iz jednog API-ja, i mala interaktivna kalkulacija (unos, par pravila, rezultat). Dozvoljeni alati: HTML, CSS, vanilla JavaScript, Astro za statiku i malo Alpine.js-a tamo gdje treba interaktivnost. Zabranjeno: sve što ima virtualni DOM.
Tjedan 1: apstinencijska kriza
Prvih dana ruke same tipkaju useState. Najviše je nedostajala komponentizacija — navika da sve razbijem u male, višekratno upotrebljive dijelove. Onda je uslijedilo prvo otrežnjenje: za landing stranicu ta potreba je bila umišljena. Stranica ima header, tri sekcije i formu. Astro komponente (koje su čisti HTML s propovima, bez ikakvog JavaScripta u pregledniku) pokrile su sve. Stranica je bila gotova brže nego inače, a Lighthouse je pokazao 100 na performansama bez ijedne optimizacije — jer preglednik nije dobio ništa za izvršavati.
Tjedan 2–3: gdje je zaboljelo
Dashboard je bila druga priča. Dohvati podatke, filtriraj po tri kriterija, sortiraj tablicu, osvježi svake minute. U vanilla JS-u to znači ručno sinkronizirati stanje i DOM: promijenio se filter → ponovno izgradi tablicu → ne zaboravi event listenere → pazi da ne curiš memoriju. Napisao sam, u biti, loš mali React za jednokratnu upotrebu. Alpine.js je pomogao (deklarativni x-if, x-for u HTML-u), ali kod oko 500 linija interaktivne logike osjetila se granica: ovo je problem koji React stvarno rješava — držati prikaz i stanje u sinkronizaciji da o tome ne razmišljate.
Kalkulacija je bila između: čisti JavaScript s jednom render() funkcijom pokazao se sasvim dovoljnim, i primjetno jednostavnijim za debugirati od hook verzije — nema stale closurea, nema ovisnosti u useEffect, samo funkcija koja iz stanja izračuna HTML.
Što su pokazale brojke
- Landing: 0 KB JavaScripta prema prije ~85 KB (gzipano) za identičan sadržaj. Vrijeme do interaktivnosti na mobitelu palo s ~3 s na praktički odmah.
- Dashboard: razvoj je trajao ~40% dulje nego što bi u Reactu, i kod je bio teži za održavanje. Ovdje bi React bio ispravan izbor.
- Kalkulacija: podjednako vrijeme razvoja, jednostavniji mentalni model bez frameworka.
Što se promijenilo kad sam se vratio
Vratio sam se Reactu — ali drugačiji. Tri stvari su ostale:
- Pitanje prije starta: koliko stanja ova stvar stvarno ima? Ako je odgovor "forma i dva gumba", React je overkill i plaćate ga kilobajtima, buildom i kompleksnošću.
- Poštovanje prema platformi. Mjesec dana bliskog kontakta s DOM-om,
<dialog>elementom,FormData-om i CSS-om koji danas može ono za što smo nekad trebali JS podsjetio me koliko je sam web napredovao dok smo mi gledali u framework. - React je alat za sinkronizaciju stanja i prikaza. Kad tog problema nema, nema ni razloga za React. Kad ga ima — vrijedi svake kilobajte.
Zaključak
Nisam postao "anti-React developer"; postao sam developer koji React bira umjesto da ga podrazumijeva. Preporučujem eksperiment svakome: mjesec dana je dovoljno kratko da ne boli, a dovoljno dugo da framework prestane biti refleks i ponovno postane odluka.




