⊗jsrtPmHkUCb 16 of 47 menu

Huku i Optimizimit të Performancës useCallback në React

Në këtë mësim do të shqyrtojmë hukun e mëposhtëm për optimizimin e performancës useCallback.

Huku useCallback është i ngjashëm me API-n useMemo, ndryshimi qëndron në faktin se i pari fletën e vlerave midis momenteve të rivizatimit të ekranit, ndërsa i dyti - callback. Kjo na lejon të mos rinisim funksionet me kosto burrimesh kur nuk kërkohet dhe mund të përdoret kur kalojmë një funksion në komponentët fëmijë.

Le ta kuptojmë më në detaje me një shembull. Së pari le të krijojmë një komponent App dhe të krijojmë në të një state num:

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

Le të kemi një buton, me klik mbi të cilin num rritet me 1, dhe një paragraf, ku ne do të shfaqim vlerën num:

return ( <div> <button onClick={() => setNum(num + 1)}>kliko</button> <p>klikime: {num}</p> </div> );

Tani, le të supozojmë se në App shfaqet një listë tjetër me elemente, të cilën do ta plotësojmë duke shtypur një buton tjetër. Për ruajtjen e elementeve të kësaj liste do të krijojmë state items:

const [items, setItems] = useState([]);

Dhe pastaj do të shkruajmë funksionin addItem për shtimin e tyre:

function addItem() { setItems([...items, 'new item']); }

Tani le të shkruajmë kodin për shfaqjen e elementeve të listës dhe ta zhvendosim atë në komponentin fëmijë Items, i cili në formën e props do të marrë një grup elementësh dhe një funksion për shtimin e tyre. Le të mos harrojmë shtimin e shfaqjes në konsol, për të parë kur Items ynë do të rivizatohet:

function Items({ items, addItem }) { const result = items.map((item, index) => { return <p key={index}>{item}</p>; }); console.log('Items render'); return ( <div> <h3>Artikujt tanë</h3> {result} <button onClick={addItem}>shto artikull</button> </div> ); } export default Items;

Le të vendosim Items në fund të komponentit App dhe t'i kalojmë atij grupin items dhe funksionin për shtimin e elementeve addItem:

return ( <> <div> <button onClick={() => setNum(num + 1)}>kliko</button> <p>klikime: {num}</p> <br /> </div> <Items items={items} addItem={addItem} /> </> );

Tani le të klikojmë butonat dhe të bindemi se num rritet dhe elementët e rinj shtohen në listë. Dhe duke hapur konsolën, do të shohim se lista jonë rivizatohet çdo herë, edhe nëse klikojmë në butonin që rrit num.

Nëse kemi një listë të vogël, atëherë gjithçka është në rregull, por çka nëse supozohet se ajo do të jetë e madhe dhe ka shumë gjëra atje? S'ka problem - do të thoni ju, sepse në mësimin e kaluar ne shqyrtuam API-n memo, për të shmangur rivizatimet e panevojshme të komponentit.

Pra, le të mbështjellim komponentin tonë Itemsmemo dhe të gjitha gjërat. Meqë ra fjala, kjo mund të bëhet direkt gjatë eksportit të Items:

export default memo(Items);

Le të mos harrojmë të importojmë memo:

import { memo } from 'react';

Tani le të hapim konsolën dhe të klikojmë butonat. Të gjitha përpjekjet janë kot! Ne e kemi memorizuar komponentin, por kur shtypim butonin 'kliko' komponenti Items prapëseprapë rivizatohet çdo herë.

Çështja është se kur komponenti prind rivizatohet, funksionet e tij rikrijohen përsëri - kjo vlen edhe për funksionin tonë addItem, të cilin e kalojmë në Items.

Është pikërisht në këtë moment që na ndihmon huku useCallback. Le ta aplikojmë atë. Së pari le ta importojmë atë në App:

import { useCallback } from 'react';

Pastaj le ta transformojmë deklarimin e thjeshtë të funksionit addItem Shprehje Funksioni, të tregojmë si parametër të parë për useCallback funksionin tonë në formën e një callback. Parametrin e dytë në kllapa katrore do ta tregojmë varësitë - të gjitha variablat reaktivë, që marrin pjesë në funksion, në rastin tonë ky është grupi items:

const addItem = useCallback(() => { setItems(() => [...items, 'New item']); }, [items]);

Gati! Kështu ne e kemi fshehur funksionin. Klikojmë përsëri butonat dhe shohim se tani kur shtypim butonin 'kliko' komponenti ynë fëmijë nuk rivizatohet.

Krijoni një komponent App, vendosni në të një paragraf me tekst. Krijoni state me vlerë fillestare 'tekst' dhe shfaqeni atë në paragraf. Le të jetë me klik në paragraf, në fund të tekstit i shtohet një pikëçuditëse.

Krijoni një komponent fëmijë Products, ku do të keni një buton për shtimin e një produkti të ri. Vendoseni atë në App. Në komponentin prind krijoni state me një grup produktesh dhe funksionin e shtimit të një produkti të ri. Kaloji ato në komponentin fëmijë si props, shfaqini në të grupin e kaluar në formën e një liste ul.

Products shfaqni në konsol tekstin 'products render'. Mbysni Productsmemo. Klikoni në paragraf dhe buton. Binduni se kur klikoni në paragraf, komponenti fëmijë prapëseprapë rivizatohet.

Fshehuni funksionin për shtimin e produkteve, duke e mbuluar atë me hukun useCallback. Klikoni në paragraf dhe buton. Binduni se kur klikoni në paragraf, komponenti fëmijë nuk rivizatohet më.

Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo