tillbaka till startsidan

59. Man ska inte prata skit om kod men here we go

Lyssna på Spotify lyssna! Lyssna på iTunes

Efter att ha avverkat Therése framtida standupkarriär gräver vi ner oss i React-hookarna useCallback och useMemo. Vad är de för något, varför finns de och hur ska de användas. Dessutom en hel del om closures, tunga uträkningar, ordo, automatisk memoisering, Reacts nya hook och mycket mycket mer.

Om du gillar podden blir vi väldigt glada för en liten recension i iTunes eller en prenumeration på Spotify. Följ oss och säg hej på @asdfpodden på Instagram eller Twitter (Anton, Therése) <3

Länkar

Avsnittets skämt:

How do trees use the internet?
They log in.
Skrapa här!!
Transkribering
Transkriberingen är gjord av nån "AI-grej". Du kan förbättra den genom att klicka precis här :)
00:00:00
How do trees use the internet?
00:00:05
Jag vet inte.
00:00:08
They log in.
00:00:11
Det var gul. Jag trodde det skulle komma något med fiber ett tag.
00:00:16
Men den där har nog snott från internet.
00:00:19
Ja, men det är så att vi inte kan förvänta oss att vi ska hitta på 55 skämt till faktiskt.
00:00:27
De får du spolar till din stand-up-karriär inom tech.
00:00:32
Ja, otroligt smalt och nischat.
00:00:36
Gud vad kul att bara gå upp och ställa sig på en stand-up-scen och köra bara de här skämten.
00:00:40
Det är också kul att jag fastnade någonstans i mitt huvud.
00:00:46
Det är de dagarna man borde ha stand-up och prata om de här blåa tossorna man måste ha på sig på läkarmottagningen när det är blött ute.
00:00:54
Hur fruktansvärt jobbigt det är.
00:00:56
Ungdomstrauma.
00:00:58
Hur som helst.
00:00:59
Hej och välkomna till ASDF.
00:01:02
Avsnitt någonting.
00:01:04
-58 kanske.
00:01:07
-Kanske.
00:01:08
Sa du inte att det var 59 förra gången?
00:01:10
-Jag vet inte, men vi är där någonstans i alla fall.
00:01:12
Snart pensionär.
00:01:16
-Snart pensionär. Det måste vi nog fira tror jag.
00:01:19
-Absolut, det löser vi på något sätt.
00:01:21
Det blir livepodd.
00:01:23
[Skratt]
00:01:28
- Ja, okej. - Det vill säga att du och jag poddade i samma rum igen.
00:01:31
- Det var ett tag sedan. - Ja, det kan vi väl se här.
00:01:33
- Dricka en cocktail. - Exakt.
00:01:35
Nu ska jag sluta deraila det här avsnittet.
00:01:38
Ja, det är mitt jobb oftast.
00:01:41
Men idag har jag funderat på en sak.
00:01:45
Och det är att...
00:01:47
Åh, man ska inte snacka skit om kål.
00:01:50
Det jag sitter i nu, i en React-app, och nu kommer det bli i React så ledsen alla som inte är intresserade av det, men det är otroligt många ljusmemo och ljuscallback i den appen.
00:02:05
Jag har funderat så himla mycket på det här. Jag har läst en hel del och åsikter om man bör använda det överallt eller inte.
00:02:15
Jag känner att jag inte riktigt får någon rätsida på det.
00:02:19
Jag har väldigt svårt att se när det är bra och inte bra att använda det.
00:02:25
Så jag tänkte höra lite dina tankar kring det här.
00:02:28
Just det.
00:02:30
Jag älskar ändå att man inte ska prata skit om kod, men "here we go".
00:02:34
[Skratt]
00:02:37
Man ska inte prata skit om andras kod.
00:02:40
Nej, absolut.
00:02:42
Och vi kan låtsas att det här är koden som du har skrivit, fast du är förvirrad över varför den är skriven som det är.
00:02:47
Precis. Så här, caset är
00:02:51
jag har hört att ljusmemo och ljuskålback ska användas för prestandaoptimering,
00:02:55
så nu har jag lagt in det precis överallt utan eftertanke och nu funderar jag på om jag har gjort rätt.
00:03:01
Jag skulle ju spontant säga att du inte har gjort rätt.
00:03:03
–men det beror ju lite på hur resten av koden ser ut.
00:03:09
Om vi börjar med "use memo" kanske, som är ett av världens mest svåra ord att säga på svengelska.
00:03:19
"Memoise".
00:03:20
–Memoisering. –Ja, memoisering. Toppen.
00:03:25
Det går ut på att du ska ta nånting som gör en uträkning egentligen.
00:03:33
och se till att den uträkningen bara görs när den behöver göras.
00:03:37
Så om du har en funktion som gör någon komplicerad och tung uträkning
00:03:42
så kan man stoppa in den i en ljus memo och så säger du att "kör bara den här uträkningen när den här variabeln ändras".
00:03:50
– Ja, för hela poängen med en funktion är att den ska ge exakt samma värde för exakt samma input varenda gång du kör den.
00:03:56
Ja, precis. Så att du vill inte stoppa in en funktion där i som beror på tid, till exempel.
00:04:01
Det är spontant ganska dåligt.
00:04:03
Ja.
00:04:05
Och det är poängen med den.
00:04:07
Och sen useCallback är ju egentligen samma sak, bara att den ger i React-världen en stabil referens till en funktion.
00:04:16
Så att när du deklarerar en funktion i en komponent i React,
00:04:19
om du bara gör det rakt upp och ner i komponenten,
00:04:21
så kommer den funktionen skapas om varje gång komponenten renderas.
00:04:27
Så varje gång komponenten renderas så får du en ny referens till den här funktionen.
00:04:33
Just Callback är på samma sätt som man skickar in den här funktionen, eller "wrappar" den i Just Callback
00:04:38
och skickar in vilka beroenden den har.
00:04:40
Då kommer du bara få en ny referens till funktionen när beroendena ändras.
00:04:45
Och här glider vi också lite in på closures i JavaScript.
00:04:51
Men vi kanske kan undvika att prata om det här för det är lite jobbigt.
00:04:56
Jag är helt blank. Jag vet ju vad det är men jag vet inte vad det är just nu.
00:05:02
Closures är ju när funktioner i JavaScript kan använda data som är definierade eller deklarerade utanför dem.
00:05:12
Och att de då "closes" över den datan.
00:05:15
Så att när funktionen kör så kommer den ha en referens till den datan som den var när funktionen skapades.
00:05:23
Vilket gör att du kan få, om du gör en funktion som "console.loggar" ett värde som du har definierat utanför funktionen.
00:05:34
Och sen ändrar du variabeln på det värdet utanför funktionen så kommer fortfarande funktionen konsologga det gamla värdet.
00:05:43
Om det har blivit ett closure.
00:05:45
Det är väl typ ett problem man brukar springa på.
00:05:47
Men closures är meckiga och det finns edge cases och massa grejer med dem.
00:05:51
Man behöver inte riktigt veta vad det är för att vi ska förstå just Memo och just Callback tror jag.
00:05:57
Nej, en sak som är bra att veta är att både ljusmemo och ljuscallback har en dependency array som säger att titta på de här värdena och när de ändras är det då du vill göra nya beräkningar.
00:06:15
Om jag förstått det korrekt, till skillnad från ljuseffekt, som också har en dependencyarray som säger "kör den här effekten när de här beroendena förändras".
00:06:26
Men ljusmemo och ljuscallback som jag förstått det, de fattar faktiskt att det inte är en ny referens till objekt, utan de facto nya värden i objekten.
00:06:38
Men det gör inte ljuseffekt, ljuseffekt går på nya referenser.
00:06:44
Det kan säkert stämma, jag har faktiskt ingen aning.
00:06:46
Jag tyckte mig läsa det nyligen.
00:06:49
En anledning till att jag inte vet är för att jag använder inte UseMemo eller UseCallback så ofta.
00:06:55
Nej precis, jag har ju historiskt sett inte gjort det heller.
00:07:00
Det är som att jag inte har kodat React med React Hooks tidigare, men det har jag nog.
00:07:04
Men jag har använt det väldigt väldigt sällan och därför blev jag så himla
00:07:08
överraskad över att det var
00:07:12
Allt var ljusmemo och ljuskålbär. De är inte små.
00:07:16
De är ju 100-200 rader långa.
00:07:20
Ja, alltså de användningsområdena som jag har använt till dig då,
00:07:26
om vi pratar ljusmemo först, då är det ju till att just
00:07:29
begränsa att tunga uträkningar körs på varje rendering.
00:07:34
Annars, om det inte är en tung uträkning så tycker inte jag det finns någon idé
00:07:39
att slänga in den i en ljus memo förrän man får performanceproblem.
00:07:43
– Nej. För det är det också de säger överallt, liksom.
00:07:48
Att så här, ja, absolut, prestanda. Men prestanda har sitt pris.
00:07:53
För att hela poängen med det här är att det kostar minne.
00:07:56
För att, jag menar, okej om du har en jättekomplex uträkning i en ljus memo,
00:08:00
men om du har typ, dependar på fem variabler,
00:08:05
Då kommer det att kosta en massa minne för att den ska hålla reda på de olika states för de här.
00:08:10
Så jag vet inte om du vinner på det i slutändan ändå.
00:08:13
Nej, precis. Det ska ju till att det ändå är något ganska pressant och krävande för att jag ska wrappa den i en just memo.
00:08:24
För jag tycker inte att att wrappa allting i just memo, det kanske känns bättre om man inte tänker på vad den faktiskt gör.
00:08:33
Då begränsar vi antal renderingar på den här komponenten.
00:08:39
Men i verkligheten är det som du säger, att det kommer med en kostnad att använda en funktion till.
00:08:44
Och den är ju oftare mer prestandakrävande än vad det blir att räkna ut siffran från de här tre variablerna några gånger.
00:08:56
Ja, men vad snackar vi som tunga uträkningar? För det är ganska många som har så här, ja det är stora switchar.
00:09:03
Men de är inte så jäkla, jag vill slänga in Ordo här.
00:09:08
Ja exakt, nu förlåter Ordo och, eller vad heter det på engelska, Big O heter det väl.
00:09:14
Då är det en throwback till universitetstiden, absolut.
00:09:19
Algoritmer och datafrikturer.
00:09:22
100% har inte använt Ordo i jobbet en enda gång.
00:09:27
Nej, vi kan länka Ordo i beskrivningen och sen kan vi gå vidare.
00:09:31
Men det är väl egentligen ett sätt att beskriva hur prestanda är krävande.
00:09:35
Eller hur många gånger någonting måste köras för att göra uträkningar baserat på dess input.
00:09:40
Ja, det är mycket så här.
00:09:42
Om man ska ta in det, att göra platta saker kostar inte så jävla mycket.
00:09:48
För platta saker så menar jag ju, alltså typ som if-satser är ju platta.
00:09:53
Switchar är ju också platta.
00:09:55
Det är liksom en check på värde du får in och sen har du ett resultat från det.
00:10:00
Om du inte gör en massa komplicerade uträkningar i dem då såklart.
00:10:03
Men att göra själva checken kostar ju inte så mycket egentligen.
00:10:07
Det är mer så här, börjar du lopa och göra recursiva anrop och så, då kan du ju få en exponentiell ökning i vad det kostar att köra de här och så vidare.
00:10:17
Ja, exakt. Har man en loop i en loop, då kommer den ju ofta öka exponentiellt.
00:10:24
Ja.
00:10:26
Det är precis ett sätt att göra det på som aldrig har fått användning för efter universitetet.
00:10:33
Men jag vet inte riktigt vad man ska definiera som tunga uträkningar.
00:10:39
Jag tror att det handlar mer om, för mig handlar det om att när jag märker att prestandan påverkas.
00:10:45
Man kan göra väldigt tunga uträkningar för att transformera massa data för att du vill rendera det på ett annat sätt än vad datan är strukturerad.
00:10:56
Och strukturerar om den och då blir det lite loopar i loopar eller att du kör Map och Reduce eller Filter och allting sånt.
00:11:03
Oftast så behövs det inte ens det att göra. Men är det väldigt mycket data, då kanske man ska sträcka sig efter JustMemo.
00:11:12
Men då blir det istället så här...
00:11:15
Då kanske lösningen egentligen är att virtualisera en lista till exempel.
00:11:20
Istället för att vi ska rendera all den här datan, då kanske vi bara kan ta ett subsätt av den datan och rendera samtidigt.
00:11:26
Och så har vi virtualiserade listor som renderas när man scrollar till exempel.
00:11:30
Så ofta finns det andra lösningar än att man ska "wrappa" de ljus mem och hoppas att det funkar i längden.
00:11:35
Jag tänker om du ska sortera en massa och sånt också, men det vill man väl också göra.
00:11:42
Virtualisera, vad säger du egentligen?
00:11:45
Det heter virtualisera tror jag.
00:11:48
Det finns en bibliotek som heter React Virtualized.
00:11:54
Som är ett tabellbibliotek som är byggt specifikt för att du inte ska rendera hela tabellen utan att det renderas de tio raderna du ser.
00:12:03
Är det någon typ av paginering eller "lazy loading"?
00:12:07
Ja, typ "lazy loading", fast du kastar också bort där du scrollar ut ur bild.
00:12:15
Jaha, "today I learned".
00:12:18
Ja, det är ett väldigt bra uttäckte. Det finns väldigt många bra bibliotek för det.
00:12:21
För det är lite mäckigt att implementera själv.
00:12:23
Men om man har väldigt mycket data så är det väldigt vettigt att virtualisera sina taveller.
00:12:28
för att slippa rendera allting samtidigt.
00:12:30
Så renderar du bara det som du vill visa upp samtidigt.
00:12:33
Det är någon som har så jävla bra koll på Ordo som har byggt om där.
00:12:37
Ja, det är det garanterat.
00:12:39
Jävlar i havet.
00:12:41
Det tycker jag är ett bra tips.
00:12:44
Att sträcka in det efter just memo först, för den kanske stoppar problemet just nu.
00:12:50
Men sen blir det mer data ändå så kommer inte heller det funka.
00:12:52
Eller om datan börjar ändras oftare, eller vad det nu kan vara.
00:12:55
Nej, alltså jag menar det där känns ju ganska vettigt såhär, att plocka in det när du känner att det finns behov.
00:13:02
För jag är ju fortfarande lite i chock av att folk hela tiden lägger saker vid ljusmemo för att jag är, men varför? Varför håller du på med det här?
00:13:11
Och den här barnen till exempel borde ju inte rendera om, ens om propparna inte ändras.
00:13:18
Jag förstår inte vad som händer, riktigt, vissa gånger.
00:13:23
Men det är ju inte så att jag bara rakt vågar gå in i en central chock i appen som har en hundra rader lång ljusmemo och bara yrka den.
00:13:36
Nej, det kan jag förstå faktiskt.
00:13:40
Jag tycker det är så svårt när det är så långa.
00:13:44
Att innehållet i Just Memo eller Just Callback blir så väldigt långt.
00:13:48
Då blir det ju helt plötsligt lite mäckigare att ändra det.
00:13:53
Det finns ju vissa fall när det kan vara värt det.
00:13:56
Som sagt, när det tar väldigt lång tid.
00:13:58
Eller som också är ljusgriset för Just Callback.
00:14:02
att du vill inte att det värdet eller den funktionen förändras för att du skickar den som en prop till en annan komponent, alltså en barnkomponent.
00:14:14
Du vill förhindra att säga att den barnkomponenten har det här värdet eller den proppen i en useEffect dependency array till exempel.
00:14:23
Då vill du inte att den ska köras om varje år i den här funktionen, eller varje gång föräldrar funktionen renderas till exempel.
00:14:29
Då kan det vara vettigt att använda useCallback eller useMem
00:14:32
beroende på vad man gör.
00:14:33
Men det är ett av få vettiga use-case som jag tycker att det finns.
00:14:37
Men vad är det då för vettiga use-case det handlar om?
00:14:42
Vi har en föräldrakomponent som definierar en
00:14:50
"handleChildUpdate" som är en funktion.
00:14:56
Och den funktionen tar emot någon typ av data och gör någonting med den.
00:15:00
Det spelar inte så stor roll vad.
00:15:01
Men den lever i föräldern.
00:15:02
Den skickas ner till barnkomponenten.
00:15:06
Den har en use-effekt som körs på grund av någonting.
00:15:10
Och då vill den köra den här proppen som skickas ner.
00:15:14
Alltså den här HandleChildUpdate-funktionen.
00:15:16
Ska man följa de här hookreglerna som finns.
00:15:21
ska ju även HandleChildUpdate-funktionen ligga med i barnets UseEffectDependencyArray.
00:15:28
Ja, det här är också någonting som vi bör diskutera.
00:15:33
Och om man då lägger med HandleChildUpdate, alltså den proppen, i dependencyarrayen.
00:15:41
Det som skulle hända då är att den useffekten skulle köras om varje gång
00:15:45
för att då har HandleChildUpdate-funktionen också förändrats.
00:15:51
Alltså det är en ny HandleChildUpdate varje gång det renderas.
00:15:54
Så skickar man den som en prop till barnet så kommer ljuseffekten köras om i barnet varje gång.
00:16:02
Då kan det vara vettigt att man "wrappar" HandleChildUpdate-funktionen i föräldern i en ljus callback.
00:16:08
Ja, det där makar känslan. Jag tänkte att det var någon mer specifik case, men det handlar mer om alla handlers så länge det är något som behöver hanteras i en side effect.
00:16:21
Ja, sen ska det ju sägas att jag har ju mer och mer, och mycket tack vare den nya React-dokumentationen, proppsat för att man inte ska använda use-effect.
00:16:32
Eller att man ska använda useeffect så lite som möjligt.
00:16:36
Och det finns en svinbra sida i den nya React-dokumentationen, den som ligger på beta.react.org
00:16:42
Som bara pratar om att du kanske behöver inte använda useeffect.
00:16:48
Och den är så jävla bra.
00:16:54
När den nya dokumentationen landar skarpt så kommer den att göra stor skillnad för hur folk skriver React.
00:17:00
Den pratar mycket om att man inte ska lägga saker i ljuseffekt som är på de här fem-sex olika fallen.
00:17:07
Det är väldigt vanliga fall.
00:17:09
Du ska inte använda ljuseffekt för att uppdatera state beroende på props.
00:17:15
Det är ett vanligt fall.
00:17:17
Du har något state som du vill använda när props ändras och då kör du en ljuseffekt.
00:17:22
Men det ska man inte göra.
00:17:24
–Vad ska man göra då? –Du kan göra det i rendermetoden istället.
00:17:28
Render ska bara köras när propsen ändras.
00:17:33
Sen beror det lite på vad man gör.
00:17:35
Men du kan också köra den till exempel om det bara ska ske en gång.
00:17:38
Då kan du stoppa in det som en initializer till useState.
00:17:42
Du kanske inte ens behöver ha en state-variabel.
00:17:45
Alltså en useState.
00:17:48
Du kanske bara kan ta propsen och sen konvertera dem och göra om det.
00:17:51
Det finns massor av alternativ på hur man kan lösa det.
00:17:54
Men jag tycker den är svinbra, så den kan jag rekommendera att läsa.
00:17:57
Vi länkar väl den också i beskrivningen.
00:17:59
- Alltså det här är lite intressant för att jag har ju känt mig helt i alla off.
00:18:04
Eller, helt off.
00:18:06
Med lite off i den här appen för att jag är så här,
00:18:07
okej, men det är ljusmemma överallt, det är ljuskålbark överallt,
00:18:10
det är ljuseffekt överallt,
00:18:11
det är ljuseffekt med dependency array som saknar alla typer av dependencies.
00:18:18
Det är också en eskildintregel som är avstängt för att man inte vill att den ska klaga på att man inte har mätt i dependency arrayen för att man hamnar i fel.
00:18:26
Kodar jag React fel?
00:18:28
För att jag är ju extremt sparsmakad med allt det här.
00:18:34
Jag bygger en komponent genom att göra en render.
00:18:42
Behöver jag det här så kollar jag hur jag får tag på det.
00:18:44
Jag gör ju inte funktioner i render. Jag lägger konstanter tills jag behöver göra nya uträkningar.
00:18:50
Jag försöker göra så lite trixiga saker som möjligt.
00:18:56
Ibland är jag väldigt rädd för att jag är så här.
00:18:58
Men är det för att jag är lite korkad?
00:19:01
Att jag inte fattar de här coola sakerna?
00:19:03
Eller varför måste det vara så komplext?
00:19:06
För jag tycker inte det behöver vara så komplext alltid.
00:19:09
Och då känner jag mig lite dum.
00:19:11
Jag tror definitivt att ditt sätt är mer rätt, om man ska säga så, än motsatsen.
00:19:19
Jag tror också att det har varit lite problem sen Hooks kom.
00:19:24
Det var väldigt mycket "vi måste förklara hur de här Hooksen funkar"
00:19:27
och se lite grann hur de ska användas.
00:19:31
Och även att React-teamet själva inte riktigt hade koll på vad som var best practices.
00:19:36
Jag tror det är lite målet med den här nya dokumentationen att skriva om den här
00:19:40
så att man kan lära sig en "Hooks first" approach i dokumentationen.
00:19:44
Vilket den nuvarande live-dokumentationen inte gör.
00:19:46
Och att man får lära sig hur man ska tänka i hooks och allting sånt mer än bara så här, det här är hooksen, här är hur den funkar, använd dem hur du vill.
00:19:55
Vilket jag skulle säga leder till att man så här, liksom spiller lite ljus memo och ljus callback här och där.
00:20:04
Ja, alltså jag hade ju, vi ska inte prata skit om andra skål. Jag ber om försikt.
00:20:14
Men det här är på svenska och de är inte svensktalande.
00:20:20
Jag hade lite pet-peeves när jag kom in i applikationen för det var ganska många ställen där de hade if-satser i början på komponenten.
00:20:29
Och liksom hooks under.
00:20:32
Och jag var så här, allting klagade på det och jag är det.
00:20:34
Om det finns en regel i React-hooks så är det ju att de ska användas unconditionally.
00:20:41
Så det var lite en grej, jag måste ändra på det här.
00:20:43
Det var lite "scary" att bara komma in i en ny app. Jag vet inte vad som hände, men bara rycka lite saker.
00:20:48
Och sen hade jag en annan grej.
00:20:49
Och det var att i ett antal ljuseffekter så gjordes Async-anrop i self-invoking functions.
00:20:59
Jag har inte sett en self-invoking JavaScript-function sen 2015.
00:21:05
–Typ. –Ja, just det.
00:21:07
Nej, och jag antar att det är gjort för att React skriker på dig om du gör async-grejer i en ljuseffekt.
00:21:17
–Ja, precis. Ljuseffekt-callbacken får ju inte vara async, så det du får göra är att skapa en funktion i asynken och sen så kalla på den.
00:21:27
Så det är samma sak, förutom att när du kör "prettier" får du ett semicolon framför self-invoking-funktionen som är...
00:21:35
...ohyggligt fult.
00:21:36
Men de hade ju också tagit bort "prettier", så att...
00:21:38
Det hade de. Men det var inte samma...
00:21:41
För det här var ju också... Det är ju lite både och.
00:21:44
Det är ju typ en byrå som man byggt och sen...
00:21:46
Ja.
00:21:47
Absolut.
00:21:50
Nej, men det är exakt.
00:21:51
Och jag tror att det är väl nånting React-världen lider lite av.
00:21:56
Särskilt när det kommer in nya React och folk ska förklara Hux och alla Hux förklaras som att de är som livscykelmetoderna i gamla React.
00:22:08
Det inte riktigt stämmer gör att koden kanske inte blir toppen jämt.
00:22:14
Nej.
00:22:17
Det är kul, en sak som jag tänkte på som var från React Conf 2021 tror jag.
00:22:23
Om jag minns rätt.
00:22:25
Så var det en presentation som var av någon...
00:22:33
Jag kommer inte ihåg vem det var som höll den nu.
00:22:35
Men det är strunt samma.
00:22:37
Den hette i alla fall React Without Memo.
00:22:39
Om jag minns rätt.
00:22:41
Det som presenterades där var ett litet experiment som de håller på med i React-teamet.
00:22:47
Där de har gjort typ en compiler som lägger på useEffect och useMemo och useCallback på alla ställen där det behövs utan att du behöver göra det själv.
00:22:58
- Jasså, jasså. - Och de kallar det för React Forget, tror jag, om jag minns rätt.
00:23:05
Alltså projektet. Bara för att det var liksom så här "Nu kan du glömma att göra det, för vi gör det åt dig".
00:23:11
Det var väldigt spännande. Presentationen i sig var extremt bra. Kanske den konferensens absolut bästa presentation skulle jag säga.
00:23:19
Så den är väl värd att titta på om man vill. Men det är det som de presenterade i alla fall.
00:23:24
Vi håller på att arbeta på att vi ska kunna göra de här optimeringarna, eller många av dem, automatiskt.
00:23:31
Ja, det vore ganska skönt att kunna släppa det.
00:23:35
Men på tal om det, var det inte så att de håller på med att skapa en ny hook som skapar upp handlers utan att skapa nya på varje render?
00:23:47
Det är sant, den heter UseEvent tror jag.
00:23:50
Den löser ju hela det problemet.
00:23:52
Ja, exakt. Så där behöver du inte just callback-wrappa saker utan den gör typ det.
00:23:56
Och den saknar också dependency array, men de gör magi i bakgrunden.
00:24:03
Som gör att värdena i den är alltid uppdaterade med den rendering den körs på.
00:24:10
Så det här vi pratar om är lite tillbaka på closures och grejer.
00:24:14
Men det är väl typ en ljus callback i bakgrunden fast med lite syntaktiskt socker ovanpå.
00:24:22
Det jag tar med mig från det här avsnittet är att jag måste läsa på "closures" igen.
00:24:27
Och jag vet inte hur många gånger jag läst på om "closures", men det bara försvinner.
00:24:31
Jag tycker också att det är väldigt svårt. Jag kanske har förklarat det lite halvförenklat också tror jag.
00:24:37
Men jag tror att folk fattar.
00:24:40
Det är väl hela grejen med den här lexikala scope och grejer och gamla grejer med "this" och vad den refererar till och hejsan och fejsan.
00:24:47
Så det är hela balen och balunsen med det där.
00:24:53
Ja, det finns ju väldigt mycket saker i bakgrunden som hör ihop.
00:25:00
Men känner du dig tryggare nu? Kommer du gå tillbaka och riva bort alla just memo och just callback?
00:25:07
Nej, jag känner mig ju lite duschigare för att jag sitter här och snackar skit.
00:25:14
Det är bara att jag har suttit så mycket i mitt egna huvud och varje gång jag lyfter frågan så säger de "How do you mean? Why?"
00:25:20
Och då säger jag "I don't know exactly"
00:25:23
Och så läser jag en till bloggpost från någon som tycker någonting
00:25:28
Det är som att jag är fast i någon snurra och kommer inte ur den
00:25:35
Nej jag kommer inte rycka, alltså speciellt, jag har ryckt några
00:25:38
Det har jag faktiskt. Samma har varit väldigt små som jag inte tycker tjänar någonting till.
00:25:44
Jag har flyttat bort alla conditionals och lagt dem under alla hooks.
00:25:49
Det var ju mycket så att det var conditionals för GraphQL, Unroop och sådana grejer.
00:25:55
Men jag har faktiskt också tagit bort Self-Invoken Functions.
00:26:01
Mest för att jag tycker att de är fula men också för att det kändes som att det var ett gammalt sätt att skriva JavaScript på.
00:26:06
Men det är väl inte fel?
00:26:09
Nej, men det blir lite mer lättläst om man inte skriver så.
00:26:12
Alltså det är väldigt argumentemått.
00:26:14
Det är också så att jag har gjort en konstant som en "arrow function" mitt i och sen kallar jag på den.
00:26:19
Det är inte supertydligt.
00:26:21
Nej, absolut. Men jag tycker ändå att det är tydligare än en "iffy".
00:26:25
Ja, men det är väl liksom...
00:26:29
Det är nog mer att jag hela tiden tvivlar på om jag är lite korkad.
00:26:35
Det tror jag faktiskt inte. Det tror jag absolut inte.
00:26:39
Hade du varit lite lite korkad tror jag att vi hade kommit till 58 avsnitt. Eller vad fan vi är på nu?
00:26:45
Vadå? Jag snackar ju bara. Vad är problemet?
00:26:49
En sak jag tänkte på som kan vara en rekommendation som jag tänkte vara på också generellt.
00:26:55
När du sa att den här ES-Lint-regeln var disabled. Har du enablat den igen?
00:27:01
Nej, vi satte den på "warning", men sen fick jag en fråga igen om mina PR.
00:27:06
"Do you know why all these complaints about this?"
00:27:10
"Kan du kolla dem?" Då orkar jag inte.
00:27:13
Ja, jag fattar.
00:27:14
Jag tänker att det är bra, särskilt när man kommer in i en sån här lite kodbas som man inte har suttit med själv.
00:27:20
Jag skulle ju sätta igång regeringen, men sen ignora alla befintliga fel.
00:27:25
Jo, jag vill också göra det, men då finns det de som är av den fasta ståndpunkten, även efter argumentation om att det är ett anti-pattern att stoppa in allting i dependency-arrayen.
00:27:40
För vissa gånger vill man bara köra det on mount och så vidare.
00:27:44
Ja, det är kriget. Den dagen.
00:27:50
Jag vet. Jag laddar. Min senaste laddning kommer att vara för att försöka att inte deploya automatiskt till production on Merge to Master.
00:27:59
Eller Merge to Main.
00:28:01
Ja, den skulle vi också kunna prata om. Men vi har lite slut på tid.
00:28:06
Jag tycker det var superkul. Det här är sån här detaljer och nitty gritty details som ändå är jävligt kul att prata om.
00:28:15
Det är också för att jag behövde lufta tankar från mitt jobb och gjorde det i en podd.
00:28:23
– Ja, det är perfekt. Det är därför jag sitter här med dig.
00:28:26
– Ja, toppen.
00:28:28
– Tack till alla som lyssnar. Hoppas ni också har en trevlig sommar, för det har vi.
00:28:35
Och så hörs vi om två veckor igen.
00:28:38
– Det gör vi. Ha det gött. – Bye bye.
00:28:40
– Bye.
00:28:42
[Musik spelas]
00:28:44
[Musik spelas]
00:28:49
Tack!
Tillbaka upp