Redux

2016-02-25
Sigurd Gartmann

Det kan se ut som vi har tatt en pause fra Samklang, og vi har jo faktisk det. Vi hadde noen problemer med Flux-implementasjonen vi hadde valgt, og bestemte oss for å se på de mest brukte, og landet på Redux.

Siden vi støter på de samme konseptene i alle prosjektene vi jobber med, ga det mening å bruke tid på å få dette inn i Node-boilerplate, og få Samklang til å basere seg på denne igjen.

Litt på samme måte som React blander HTML og Javascript, prøver ikke Redux å følge Flux til punkt og prikke, men ender opp med sine egne konsepter. Her trigger man actions som blir lyttet på av reducers, som propagerer endringer i props til litt avanserte komponenter, kalt containers.

I vår nye versjon av Node-boilerplate har vi nå dratt inn Redux og et lite knippe nyttige tilleggsmoduler:

  • Redux
  • React-Redux
  • React-Router-Redux
  • Redux-Immutable
  • Redux-Socket.io

Jada. Det meste virker, men alt har ikke helt gått etter planen. Vi hadde veldig lyst til å lage dette “universalt” eller “isomorfisk”, som vil si at vi lar serveren og klient rendre innholdet likt. Noe av det som gjør React så bra, er at man kan rendre på server, og få klienten til å gjenbruke elementene, og dette gjør det fristende å få til det “universelle” her.

Noe av det flotte med en “universal” app, er altså at den samme koden rendrer likt på tjener og klient. Da hadde det også vært fint om nettverkskallene som brukeren initierer på klientsiden kan kjøres likt på serversiden. Og inn kommer Isomorphic-fetch, som bruker Whatwg-fetch og Node-fetch på henholdsvis klient og tjener. Men vi fant etterhvert ut at Node-fetch ikke er laget for å gjøre spørringer mot egen tjener:

Man må bruke tjenernavn i alle spørringer Man har ingen enkel måte å si at credentials skal følge med, og man må hente ut cookie og videresende den selv. Vi fikk det til, men siden det føles som et hack, har vi foreløpig landet på et alternativ der vi godtar å ha forskjellige ruter inn til api, og de rutene serveren initierer. Vi lar rutene være forskjellige, men lar dem wrappe felles funksjoner.

Jaja, det nærmer seg. Den versjonen som ligger ute nå, har ganske mye virk.