Alle vil ha signals, nå kan det bli standard i JavaScript

Løsningen som brukes for reaktivitet i rammeverk som Preact, Angular, Solid.js, og etter hvert Svelte, kan bli standard-funksjonalitet i JavaScript.

Signals kan bli standardfunksjonalitet i JavaScript. 📸: Kurt Lekanger
Signals kan bli standardfunksjonalitet i JavaScript. 📸: Kurt Lekanger Vis mer

I JavaScript-rammeverk som for eksempel React eller Angular håndteres reaktivitet på ulike måter. Med reaktivitet menes rammeverkets evne til å oppdage endringer i appens tilstand (state) og automatisk oppdatere UI-et for å gjenspeile endringene.

Mens React rendrer hele UI-et på nytt hver gang tilstanden endres, har det i det siste vært mye snakk om at Signals kan være en bedre måte å løse reaktivitet på. Signals er tatt i bruk i rammeverk som Angular, Solid.js og Preact – og er også grunnlaget for Sveltes såkalte runer som blir den nye måten å håndtere reaktivitet på fra og med Svelte 5, som lanseres snart.

foreslår to medlemmer av TC39, Rob Eisenberg og Daniel Ehrenberg, å gjøre Signals til en del av JavaScript-standarden. Det skriver Bytes.dev.

TC39 er komitéen som er ansvarlig for å ta forslag til JavaScript-språket fra idé til godkjenning.

Ikke gjør mer enn nødvendig

Signals gjør det mulig å oppdatere kun de delene av brukergrensesnittet som avhenger av en verdi, i stedet for at hele brukergrensesnittet må rendres på nytt.

Slik det er implementert i for eksempel Angular så har man en "wrapper" rundt verdier som man ønsker skal være "signaler". Når denne verdien endres, vil alt som bruker verdien automatisk oppdateres. Dette fungerer ved at man i stedet for å bruke konstanter og variabler direkte, bruker gettere og settere slik at rammeverket vet når verdien er brukt.

Eksempel fra Angular:

const count = signal(0);
// Signals are getter functions - calling them reads their value.
console.log('The count is: ' + count()); 
count.set(3)

Siden man som i eksempelet over kaller en funksjon for å lese eller oppdatere en verdi, kan altså rammeverket vite at verdien er brukt – og oppdatere kun den delen av UI-et som avhenger av verdien.

I forslaget om å gjøre Signals til en del av JavaScript-standarden, skriver Eisenberg og Ehrenberg at målet med signaler er å tilby en infrastruktur for å håndtere slik applikasjonstilstand. Dermed kan utviklere fokusere på forretningslogikk heller enn denne typen repetitive detaljer.

Bruk på tvers av rammeverk

I dag er det opp til hvert enkelt rammeverk å implementere signaler, men forslagsstillerne mener det vil være flere fordeler ved å gjøre dette til en del av JavaScript-spesifikasjonen:

  • Interoperabilitet: Ulike måter å implementere signaler på i ulike rammeverk gjør det vanskelig å dele modeller, komponenter og biblioteker mellom ulike rammeverk. Dette blir enklere om Signals blir en del av JavaScript.
  • Utviklerverktøy: Innebygget Signals vil kunne gjøre det enklere å inspisere og debugge signalene fra utviklerverktøyene i nettleserne.
  • Forbedret utvikleropplevelse (DX): Med Signals innebygget i JavaScript vil du kunne få mindre "bundle"-størrelse, bedre stabilitet og kvalitet, og det vil være færre ting for utviklere å lære seg når de tar i bruk et nytt JavaScript-rammeverk.

Dette forslaget er nå i "stage 0", som betyr at det kan ta lang tid før det eventuelt blir en del av JavaScript. I første omgang ønsker forslagsstillerne nå å gjøre tidlig prototyping – men de har laget en polyfill for dem som vil prøve det ut allerede nå.

– Vi er bare interessert i å standardisere Signals hvis de viser seg å være egnet for bruk i praksis i mange ulike rammeverk, og gi reelle fordeler over Signals som tilbys av rammeverkene selv, skriver forslagsstillerne.