⊗jsrtPmHkAMe 15 of 47 menu

API memo во React

Пред да го разгледаме следниот кук, потребно е да се спомене и корисниот API memo, кој ни помага да избегнуваме повторно рендерирање на компонентата, ако нејзините пропси остануваат непроменети.

Ајде да го разгледаме ова со пример. Да создадеме компонента App, во која ќе има два инпута, во кои, да претпоставиме, се внесуваат име и презиме:

return ( <div> <label> име: <input value={name} onChange={(e) => setName(e.target.value)} /> </label> <br /> <label> презиме: <input value={surn} onChange={(e) => setSurn(e.target.value)} /> </label> </div> );

Да додадеме на почетокот на компонентата стејтови за нив:

const [name, setName] = useState(''); const [surn, setSurn] = useState('');

Да направиме и детска компонента Child.js, нека ја прикажува поздравот, во кој ќе се прикажува внесеното име. Исто така во конзолата ќе се прикажува стрингот 'child render' при секое рендерирање на оваа компонента:

function Child({ name }) { console.log('child render'); return <h3>Здраво {name}!</h3>; }

Да го додадеме Child во верстката на главната компонента по последниот инпут и како пропс ќе му го пренесеме името:

<Child name={name} />

Да ја импортираме во главната компонента:

import Child from './Child';

А сега да ја отвориме конзолата и да ги пополнуваме полињата за внесување со име и презиме. Овде ќе видиме дека дури и при внесување знаци во полето за презиме, нашата детска компонента ќе се прецртува секој пат. Нема проблеми, бидејќи имаме мала компонента. Но, замислете ако оваа компонента прикажуваше голема количина на податоци и притоа, секој пат се прецртуваше.

А сега ајде да ја обвиеме детската компонента во memo, и да погледнеме, како ќе се промени рендерирањето. За почеток да го импортираме во неа memo:

import { memo } from 'react';

Потоа да создадеме нова променлива и да ѝ ја доделиме нашата Child, обвиена во memo. Ќе добиеме следното функционално изразување:

const Child = memo( function Child({ name }) { console.log('child render'); return <h3>Здраво {name}!</h3>; });

Да ја отвориме конзолата и повторно да внесуваме име и презиме во полињата. Сега гледаме дека при внесување на презиме, нашата детска компонента не се прецртува.

Треба да запомниме дека ова нема да работи, ако при непроменети пропси се менуваат стејтовите, вклучени во компонентата или контекстот кој користи промени.

Земете го кодот на компонентата App, кој го направивме на оваа лекција, оставете во неа само првиот инпут. Создадете React компонента Text, која содржи параграф со текстот 'long text', и поставете ја во App после инпутот.

Во компонентата Text додадете линија console.log('text render');. Проверете дали при внесување знаци во инпутот компонентата Text се прецртува секој пат.

А сега обвијте ја компонентата Text во memo. Проверете, дали при внесување знаци во инпутот компонентата Text не се прецртува повторно.

Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј