Ťažké časy pre React?

09.03.2024

Už niekoľko týždňov sa na internete objavujú vyjadrenia od známych aj menej známych používateľov React-u, v ktorých vyjadrujú svoju nespokojnosť s jeho stavom. Počet takýchto vyjadrení sa nedal ignorovať, takže sa mi v hlave prirodzene objavili otázky, či sa o React treba obávať a či prípadne nehľadať náhradu. V nasledujúcom texte sa dozviete, prečo sú teraz ľudia s React-tom nespokojní a k akej odpovedi na predchádzajúce otázky som sa dopracoval.

V roku 2023 sme sa v práci rozhodli, že React bude našou knižnicou prvej voľby pre každý nový projekt. A ako odporúčaný framework sme si vybrali Next.js. Rozhodli sme sa tak napriek tomu, že už vtedy bolo vidieť medzi vývojármi rastúcu popularitu signálov a resumability a tieto koncepty nejdú úplne dokopy s filozofiou React-u, kde výzor UI je len jednoduchou funkciou stavu.

React navyše prinášal svoje vlastné riešenie pre problémy s veľkým množstvom JavaScript-u v prehliadači a nabobtnanou hydráciou. Týmto riešením sú React Server Components (RSC) a možno síce nie sú také efektívne, ako resumability v Qwik-u, ale sú v súlade s React filozofiou a tak by mali byť jednoduchšie na pochopenie.

Pre mňa je to dostatočne dobrý dôvod ostať na React-e aj pre firemné, aj pre svoje osobné projekty. Mojou najväčšou výtkou voči RSC je teraz to, že do prehliadača potrebujeme dostať viac JavaScript-u na oživenie stránky, ako by sme potrebovali napríklad v už spomínanom Qwiku. Verím však, že časom prídu optimalizácie a rozdiel nebude taký veľký.

Po tom, čo začal RSC podporovať Next.js (vo verzii 13.4), tak si ich mohlo pomerne jednoducho vyskúšať široké publikum vývojárov. Čo čert nechcel, publikum začalo šomrať.

Posledné týždne sledujem, že k tomuto šomraniu sa pridáva stále viac prominentných vývojárov a komunitných lídrov. Ako príklad uvediem post od Cassidy Williams nazvaný Kind of annoyed at React a ďalší, ktorý napísal Matteo Frana a volá sa React, where are you going?. V tom druhom odporúčam pozrieť sa aj na komentáre, kde Mark Erikson (core vývojár Redux-u a Redux Toolkit-u) prispel svojím názorom.

Človek by ľahko mohol nadobudnúť pocit, že to nevyzerá pre React dobre a možno bude naozaj lepšie sa začať obzerať po nejakej náhrade.

Ja to však až takto čierne nevidím. Prečo? Pretože aj keď problémy, na ktoré ľudia poukazujú, nie sú vymyslené, tak vo svojej podstate pramenia z toho, že React sa mení. A ľudia všeobecne nemajú radi, keď sa ich obľúbené veci menia, ani keby to malo byť k lepšiemu.

Môžeme si to skúsiť len veľmi zrýchlene rozobrať na jednotlivé problémy:

Slabá komunikácia vývojárov React-u s komunitou

Ľudia sa sťažujú, že React tím slabo komunikuje do sveta svoje zámery a tak nevedia, čo majú čakať. Ja osobne toto nevnímam a môj dojem bol skôr opačný. Mám pocit, že nejaký zástupca hovoril na každej konferencii, ktorú som minulý rok sledoval. Zároveň viem, že som čítal viacero článkov a postov od vývojárov všemožných knižníc o tom, ako teraz intenzívne komunikujú s React tímom ohľadom toho, ako by mohla ich knižnica podporovať RSC.

Treba však povedať, že ja nie som vývojár žiadnej populárnej knižnice a ani žiadna osobnosť v komunite a tak možno len nevidím, že na každého vývojára, s ktorým React tím komunikuje, je 50 ďalších, ktorí na svoje otázky odpovede nedostali.

Otázne podľa mňa je, čím je táto nekomunikácia zo strany React vývojárov spôsobená. Je to odo mňa dosť veľká špekulácia a budúcnosť ukáže, nakoľko sa mýlim, ale podľa mňa môžu byť dôvody aj pomerne prozaické.

React tím teraz vyvíja niekoľko veľkých projektov zároveň, ktoré odčerpávajú energiu. Jednak sú to RSC a veci s nimi súvisiace (actions), potom React compiler (Forget) a totálne prekopanie oficiálnej dokumentácie, ktorá je po novom skôr interaktívnym kurzom.

Vývoj React-u už nezastrešuje len jedna firma (Meta), ale dve (Vercel) a zladiť ich záujmy a komunikačnú stratégiu môže nejaký čas trvať.

Veľa core vývojárov a ešte viac tých ostatných menilo prácu. Meta (a nielen) prepúšťala vývojárov vo veľkom. Títo si museli nájsť nové zamestnanie, ideálne také, aby mohli pokračovať v práci na React-e, uchytiť sa v ňom a prispôsobiť sa novým okolnostiam.

Viem si živo predstaviť, že by mi pri kombinácii takýchto okolností neostávalo veľa času a ani energie na dodatočnú komunikáciu s komunitou. Už len samotná zmena práce vie byť veľmi náročná.

Zložitosť RSC

Ukazuje sa, že pomerne jednoduchý koncept serverových komponent spôsobuje problémy v detailoch. Musíme zrazu premýšľať, či je možné komponent rendrovať iba na serverovej strane a pokiaľ nie, tak ho označiť ako klientský (use client). Zároveň sa otvára otázka organizácie komponentov v projekte a konkrétne to, či chceme serverové a klientské komponenty držať pokope alebo v oddelených priečinkoch.

Podobne je to s akciami, ktorých kód sa môže nachádzať v súbore s klientským komponentom, ale vykonávajú sa na serveri.

RSC aj pozmenili rovnicu, podľa ktorej bolo vykreslené používateľské rozhranie iba funkciou stavu. Po novom je to už funkcia stavu a dát, pričom dáta sú na serverovej strane a stav na klientskej.

Všetky tieto zmeny vyžadujú iné uvažovanie o aplikácii, o kóde a jeho organizácii. A možno to síce nie je diametrálne iné uvažovanie, ale stále je iné, než na aké sme boli v React aplikácii po celé roky zvyknutí.

Osobne verím tomu, že RSC bol krok správnym smerom a aktuálne sťažnosti na zložitosť odznejú, keď si na nový spôsob premýšľania ľudia viac zvyknú. Nie som ale taký naivný, aby som tvrdil, že všetko okolo RSC bolo navrhnuté dobre. Predsa len ide o veľkú zmenu a očakávam, že o niektorých veciach časom zistíme, že ich treba premyslieť. Nebolo by to prvýkrát (spomeňme si na mixiny alebo triedne komponenty celkovo).

Knižnica alebo framework

React o sebe doteraz tvrdil, že je iba obyčajnou knižnicou a stále sa toho drží. V čase, keď toto píšem, tak domovská stránka React-u stále definuje React ako "The library for web and native user interfaces".

Domovská stránka React-u

Knižnice sa vyznačujú tým, že sú iba nástrojom, ktorý môžeme používať tak, ako sa nám hodí a nenútia nás do určitého štýlu alebo architektúry.

Pokiaľ však chceme používať React Server Components, tak nás to tlačí do architektúry, kde nemáme veľa priestoru pre vlastné riešenia.

Mnohých ľudí to hnevá a boli by radšej, keby React rovno priznal, že sa stal frameworkom. Ja si myslím, že React je aktuálne na hrane. Má síce niektoré frameworkové črty, ale nedá sa vyhlásiť za framework. Zo všetkých aktuálne diskutovaných problémov React sveta je tento pre mňa najmenej podstatným.

Nová dokumentácia

Určitú nevôľu v komunite spôsobuje aj nová dokumentácia k React-u. Konkrétne tá jej časť, ktorá pojednáva o inštalácii. Prečo? Pretože autori v nej odporúčajú používať React spolu s nejakým meta-frameworkom a na výber dávajú Next.js, Remix a Gatsby. Tým trochu nahnevali všetkých, ktorí doteraz používali React bez frameworku a bundlovanie, routing a prípadne aj SSR si riešili takými nástrojmi, aké im vyhovali. Nuž, a keďže Create React App (už nevyvíjaný), Vite a Parcel ponúkajú veľmi jednoduché spôsoby, ako naštartovať nový React projekt, tak takýchto používateľov je väčšina.

Dokumentácia odporúča použiť framework

Keď sa teda v React dokumentácii zjavilo odporúčanie na používanie frameworku a odhováranie od doterajších metód, tak sa čast ľudí zľakla, či vývoj nesmeruje k tomu, že ich spôsob používania React-u prestane byť podporovaný.

Zdá sa, že toto sa našťastie nedeje a vývojári nám žiadne možnosti nezobrali. Ja situáciu chápem tak, že príchod RSC skomplikuje situáciu všetkým, ktorí používajú vlastnú kombináciu nástrojov a budú chcieť RSC podporovať. Pretože nastaviť si veci správne nemusí byť zrovna triviálne a bude vyžadovať nemalú mieru trpezlivosti. Takže výmena vlastného setupu za nejaký známy framework môže byť pre mnohých ľudí zmysluplnou možnosťou.

Musíme si však priznať aj to, že za týmto odporúčaním je v nemalej miere určite aj snaha viac spropagovať Next.js framework vyvíjaný firmou Vercel.

Monopolizácia používania nových čŕt len pre Vercel a Meta

Veľkú kritiku od komunity schytáva firma Vercel za to, že vo svojich stabilných verziách frameworku Next.js umožňuje používať vlastnosti z React Canary. Výčitky smerujú k tomu, že pokiaľ sú tieto vlastnosti dostatočne overené a stabilné na to, aby ich Vercel zahrnul do svojho frameworku, tak prečo sa rovno nevydá nová stabilná verzia React-u, kde sa tieto veci sprístupnia všetkým?

Meta a Vercel sú dve firmy, ktoré do vývoja React-u investujú najviac. Dáva tak síce zmysel, pokiaľ nové vlastnosti používajú vo svojich projektoch, ale keďže sa ich Vercel rozhodol použiť nielen v interných nástrojoch, ale priamo v Next.js, tak mu to dáva výhodu oproti iným frameworkom. Vercel má totiž rozhodne lepší vhľad do toho, čo v Canary verzii je vhodné do produkcie, než ostatní. Takže tieto informácie môže použiť a získať tak konkurenčnú výhodu.

Toto správanie od nich nie je pekné, ale kým bude vývoj React-u v rukách veľkých firiem, tak sa to v nejakej miere bude diať stále. Nakoľko je však komunita pobúrená už teraz, tak nie je vylúčené, že sa časom nájde nejaký iný model vývoja a vydávania nových verzií.

Zhrnutie

Stav okolo React-u a jeho vývoja aktuálne nie je ideálny. Podľa mňa je to však prirodzené, prechádzame veľa zmenami, začíname sa viac sústrediť na server a nejaký čas potrvá, kým sa všetko utrasie. Áno, niektorí používatelia a aj známi ľudia z komunity sa začnú obzerať po alternatívach a viacerí ich aj začnú používať. To je normálne, pretože prebiehajúce zmeny nemusia vyhovovať každému a každého zasiahnu v inej miere.

Myslím si, že aj my by sme sa mali rozhodovať podľa toho, nakoľko nás zmeny ovplyvňujú, koľko problémov riešia a koľko vecí skomplikujú. A nie podľa toho, aké emócie sa aktuálne zdajú byť dominantné na internete.