⊗jsrtPmHkUMe 14 of 47 menu

Die gebruikMemo-prestasie-optimaliseringshaak in React

Die eerste haak vir prestasie-optimalisering wat ons sal ondersoek is useMemo.

Hierdie haak help om die resultate van hulpbronintensiewe bewerkings tussen hertekeninge van die skerm te kas en kan dus help om onnodige omvangryke berekeninge te vermy. Sodanige kas word ook memoisering genoem.

Laat ons kyk hoe dit werk. Kom ons skep 'n komponent met 'n knoppie en 'n h3-opskrif:

return ( <div> <h3>Text</h3> <button>click</button> </div> );

En nou sal ons dit so maak dat wanneer daar op die opskrif geklik word, die kleur daarvan van oranje na groen verander en terug. Om te begin laat ons 'n staat isGreen skep:

const [isGreen, setIsGreen] = useState(false);

Kom ons voeg in die style-kenmerk van die opskrif 'n voorwaarde vir kleurverandering by en laat ons 'n klikhanterer byvoeg:

<h3 onClick={() => setIsGreen(!isGreen)} style={{ color: isGreen ? 'green' : 'orangered' }} >Text</h3>

Laat ons ook 'n waarde hê wat sal toeneem met een wanneer daar op ons knoppie geklik word. Laat ons 'n staat daarvoor skep:

const [num, setNum] = useState(0);

Kom ons voeg die hantering van die klik op die knoppie by:

<button onClick={() => setNum(num + 1)}> clicks </button>

Laat ons ook 'n funksie hê square, wat die kwadraat van die waarde num sal teruggee. Die resultaat van die funksie-aanroep sal ons in die veranderlike result skryf:

const result = square(num); function square(num) { return num * num; }

Laat ons result in die knoppie-teks vertoon:

<button onClick={() => setNum(num + 1)}> clicks: {result} </button>

Uiteindelik het ons die volgende: wanneer op die knoppie geklik word, verander die waarde num, wat dan gekwadreer word, en wanneer op die opskrif geklik word verander die kleur van die opskrif.

Ons het 'n baie klein komponent, alles werk vinnig, ondanks die feit dat wanneer daar op die opskrif geklik word om die kleur te verander, die hele komponent weer geteken word, en gevolglik gebeur al die berekeninge wat aan die knoppie gekoppel is, weer, selfs al raak ons dit nie aan nie. En stel jou nou voor as ons berekeninge omvangryk was en alles elke keer weer bereken sou word.

Kom ons maak ons funksie 'n bietjie swaarder, nou sal dit 'n bietjie langer dink. Op hierdie manier sal ons lang berekeninge simuleer:

function square(num) { let startTime = performance.now(); while (performance.now() - startTime < 500) { // Doen net niks ... } return num * num; }

Klik nou op die opskrif. Dit blyk dat nou, as gevolg van die lang werk van die funksie square (en ons raak nie die knoppie aan nie) moet ons 'n ewigheid wag voordat die opskrif van kleur verander!

Hier kom die useMemo-haak ons te hulp. Om dit te doen, moet ons as eerste parameter 'n funksie deurgee wat die waarde bereken wat ons wil kas, hierdie funksie moet suiwer wees en geen parameters aanvaar nie. En as tweede parameter - die afhanklikhede in vierkantige hakies, met ander woorde, alle reaktiewe waardes wat in die funksiekode deelneem. Dus, in result sal ons nou so 'n konstruksie skryf:

const result = useMemo(() => square(num), [num]);

Klik weer op die opskrif. Nou, as ons nie die knoppie met die berekeninge aanraak nie en dus nie die staatswaarde num verander nie, word niks herbereken nie, en React vertoon die gekaste waarde in die knoppie, daarom verander ons opskrif vinnig sy kleur.

Skep 'n komponent App, plaas 'n paragraaf daarin. Skep 'n staat text met die aanvanklike waarde 'react', laat die staatswaarde vertoon word as die teks van die paragraaf. Laat, by 'n klik op die paragraaf, 'n uitroepteken aan die einde van die teks gevoeg word.

Skep nog 'n staat num, met 'n aanvanklike waarde van 0. Plaas in App nog 'n paragraaf. Maak dit so dat wanneer daar daarop geklik word, num met 1 toeneem.

En voeg nou by in App die funksie triple, wat as parameter num aanvaar en die driedubbelde waarde daarvan teruggee. Plaas die resultaat van die funksie-aanroep in die veranderlike result. Vertoon result as die teks van die tweede paragraaf. Klik een vir een op die paragrawe, let op hoe stadig die uitroeptekens bygevoeg word.

Herstel die situasie deur die stadige funksie triple in useMemo te verpak.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp