⊗jsrtPmHkUMe 14 of 47 menu

Хук аптымізацыі прадукцыйнасці useMemo у React

Першы хук для аптымізацыі прадукцыйнасці, які мы разгледзім - гэта useMemo.

Дадзены хук дапамагае кэшаваць вынікі рэсурсаёмістых аперацый паміж мамантамі перамалёўкі экрана і адпаведна можа дапамагчы пазбегнуць лішніх аб'ёмных вылічэнняў. Такога кэшаванне называюць яшчэ мемаізацыяй.

Паглядзім, як гэта працуе. Давайце створым кампанент з кнопкай і загалоўкам h3:

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

А зараз зробім так, каб па кліку на загаловак яго колер мяняўся з аранжавага на зялёны і назад. Для пачатку завядзем стэйт isGreen:

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

Дададзім у атрыбут style загалоўка ўмова змянення колеру загалоўку і навядзім апрацоўшчык кліку:

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

Хай у нас таксама будзе якое-небудзь значэнне, якое будзе павялічвацца па кліку па нашай кнопачцы на адзінку. Завядзем для яго стэйт:

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

Дададзім апрацоўку кліку па кнопцы:

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

Хай таксама ў нас будзе нейкая функцыя square, якая будзе вяртаць квадрат значэння num. Вынік выкліку функцыі мы будзем запісваць у пераменную result:

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

Вывядзім result у тэксце кнопкі:

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

У выніку ў нас атрымалася наступнае: па кліку на кнопку мяняецца значэнне num, якое затым узводзіцца ў квадрат, а па кліку на загаловак мяняецца колер загалоўка.

У нас вельмі маленькі кампанент, усё працуе хутка, нягледзячы на тое, што па кліку па загалоўку для змены яго колеру ўвесь кампанент адмалёўваецца нанова, адпаведна адбываюцца нанова і вылічэнні, якія прывязаны да кнопкі, гэта нават пры тым, што мы да яе не краналіся. А цяпер уявіце, калі б нашы вылічэнні былі аб'ёмнымі і ўсё пералічвалася б нанова кожны раз.

Давайце, крыху цяжэй нашу функцыю, цяпер яна будзе думаць крыху даўжэй. Такім чынам мы сімітуем доўгія вылічэнні:

function square(num) { let startTime = performance.now(); while (performance.now() - startTime < 500) { // Проста нічога не рабіць ... } return num * num; }

Панаціскайце зараз на загаловак. Атрымліваецца, што цяпер з-за доўгай працы функцыі square (а кнопку-то мы не кранаем) мы цэлую вечнасць павінны чакаць, каб у загалоўка памяняўся колер!

Тут к нам на дапамогу і прыйдзе хук useMemo. Для гэтага, нам трэба першым параметрам перадаць функцыю, якая вылічвае значэнне, якое мы хочам кэшаваць, дадзеная функцыя павінна быць чыстай і не прымаць ніякіх параметраў. А другім параметрам - залежнасці ў квадратных дужках, іншымі словамі, усе рэактыўныя значэнні, якія ўдзельнічаюць у кодзе функцыі. Такім чынам, у result мы цяпер упішам такую канструкцыю:

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

Зноў панаціскаем на загаловак. Цяпер, калі мы не кранаем кнопку з вылічэннямі і не мяняем такім чынам значэнне стэйта num, то нічога не пералічваецца, і React адлюстроўвае кэшаванае значэнне ў кнопцы, таму наш загаловак хутчэйшанька мяняе свой колер.

Стварыце кампанент App, размясціце ў ім абзац. Завядзіце стэйт text з пачатковым значэннем 'react', хай значэнне стэйта адлюстроўваецца ў якасці тэксту абзаца. Хай па кліку на абзац, яму ў канец тэксту дадаецца клічнік.

Завядзіце яшчэ адзін стэйт num, з пачатковым значэннем 0. Размясціце ў App яшчэ адзін абзац. Зрабіце так, каб пры кліку па ім num павялічвалася на 1.

А цяпер дадайце ў App функцыю triple, якая ў якасці параметра прымае num і вяртае яго патроенае значэнне. Пакладзіце вынік выкліку функцыі у пераменную result. Адлюструйце result у якасці тэксту другога абзаца. Папераклікайце па чарзе на абзацы, адзначце, як павольна дадаюцца клічнікі.

Выпраўце сітуацыю, абгарнуўшы павольную функцыю triple у useMemo.

Беларуская
AfrikaansAzə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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць