⊗jsrtPmHkUCb 16 of 47 menu

Našumo optimizavimo vikšras useCallback React'e

Šioje pamokoje apžvelgsime šį našumo optimizavimo vikšrą useCallback.

Vikšras useCallback yra panašus į API useMemo, skirtumas tas, kad pirmasis kešuoja reikšmę tarp ekrano perpiešimo momentų, o antrasis - atgalinio iškvietimo funkciją. Tai leidžia mums neperleisti resursų reikalaujančių funkcijų, kai to nereikia ir gali būti naudojama perduodant funkciją į antrinius komponentus.

Išsiaiškinkime išsamiau pavyzdžiu. Pirmiausia sukurkime komponentą App ir jame sukurkime būseną num:

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

Turėkime mygtuką, paspaudus kuri num padidėja 1, ir pastraipą, kurioje rodysime reikšmę num:

return ( <div> <button onClick={() => setNum(num + 1)}>spustelėti</button> <p>paspaudimai: {num}</p> </div> );

O dabar tarkime, kad mums App rodomas dar kažkoks sąrašas su elementais, kurį papildysime paspaudus kitą mygtuką. Elementų saugojimui šiame sąraše sukursime būseną items:

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

Ir tada parašysime funkciją addItem jų pridėjimui:

function addItem() { setItems([...items, 'naujas elementas']); }

Dabar parašykime kodą sąrašo elementų atvaizdavimui ir išskirkime jį į antrinį komponentą Items, kuris kaip props gaus elementų masyvą ir funkciją jų pridėjimui. Nepamirškime pridėti išvesties į konsolę, kad matytume kada mūsų Items bus perpiešiamas:

function Items({ items, addItem }) { const result = items.map((item, index) => { return <p key={index}>{item}</p>; }); console.log('Items perpiešiamas'); return ( <div> <h3>Mūsų elementai</h3> {result} <button onClick={addItem}>pridėti elementą</button> </div> ); } export default Items;

Įdėkime Items į komponento App pabaigą ir perduokime jam masyvą items ir funkciją elementų pridėjimui addItem:

return ( <> <div> <button onClick={() => setNum(num + 1)}>spustelėti</button> <p>paspaudimai: {num}</p> <br /> </div> <Items items={items} addItem={addItem} /> </> );

O dabar paspauskime mygtukus ir įsitikinkime, kad num auga ir nauji elementai pridedami į sąrašą. O atsidarę konsolę pamatysime, kad mūsų sąrašas perpiešiamas kiekvieną kartą, net jei mes spusteliame mygtuką, kuris padidina num.

Jei turime nedidelį sąrašėlį, tai viskas gerai, o jei numatoma, kad jis bus didelės apimties ir ten dar daug ko yra? Nieko baisaus - sakysite jūs, juk praeitoje pamokoje mes nagrinėjome API memo, kad būtent išvengtume nereikalingų komponento perpiešimų.

Taigi apvyniokime mūsų komponentą Items į memo ir viskas. Beje, tai galima padaryti tiesiogiai eksportuojant Items:

export default memo(Items);

Nepamirškime importuoti memo:

import { memo } from 'react';

O dabar atsidarykime konsolę ir paspauskime mygtukus. Visos pastangos veltui! Mes įsiminėme komponentą, bet paspaudus mygtuką 'spustelėti' komponentas Items vis tiek perpiešiamas kiekvieną kartą.

Reikalas tas, kad kai pagrindinis komponentas perpiešiamas, jo funkcijos perkuriamos iš naujo - tai liečia ir mūsų funkciją addItem, kurią perduodame į Items.

Būtent šiuo momentu mums padės vikšras useCallback. Taikykime jį. Pirmiausia importuokime jį į App:

import { useCallback } from 'react';

Tada performuluokime paprastą funkcijos addItem deklaravimą į Funkcijos Išraišką, nurodykime kaip pirmą parametrą useCallback mūsų funkciją atgalinio iškvietimo pavidalu. Antru parametru laužtiniuose skliaustuose nurodykime priklausomybes - visus reaktyvius kintamuosius, dalyvaujančius funkcijoje, mūsų atveju tai masyvas items:

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

Paruošta! Taigi mes užkešavome funkciją. Vėl paspauskime mygtukus ir pamatysime, kad dabar paspaudus mygtuką 'spustelėti' mūsų antrinis komponentas nebesiperpiešia.

Sukurkite komponentą App, įdėkite jį pastraipą su tekstu. Sukurkite būseną su pradine reikšme 'tekstas' ir išveskite ją pastraipoje. Tegul paspaudus ant pastraipos jai į teksto pabaigą pridedamas šauktukas.

Sukurkite antrinį komponentą Products, kuriame turėsite mygtuką naujo produkto pridėjimui. Įdėkite jį į App. Pagrindiniame komponente sukurkite būseną su produktų masyvu ir funkciją pridėjimo naujo produkto. Perduokite juos į antrinį kaip props, išveskite jame perduotą masyvą kaip sąrašą ul.

Products išveskite į konsolę tekstą 'products perpiešiamas'. Apvyniokite Products į memo. Paspaudinėkite ant pastraipos ir mygtuko. Įsitikinkite, kad spustelint ant pastraipos antrinis komponentas vis tiek perpiešiamas.

Užkešuokite funkciją produktų pridėjimui, apvynioję ją į vikšrą useCallback. Paspaudinėkite ant pastraipos ir mygtuko. Įsitikinkite, kad spustelint ant pastraipos, antrinis komponentas nebesiperpiešia.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti