⊗jsrtPmHkAMe 15 of 47 menu

API memo u React-u

Pre nego što pređemo na sledeći hook, potrebno je pomenuti i korisni API memo, koji nam pomaže da izbegnemo ponovno renderovanje komponente, ako njeni props-i ostanu nepromenjeni.

Hajde da ovo razmotrimo na primeru. Napravićemo komponentu App, u kojoj će biti dva input polja, u koja se, pretpostavimo, unose ime i prezime:

return ( <div> <label> name: <input value={name} onChange={(e) => setName(e.target.value)} /> </label> <br /> <label> surname: <input value={surn} onChange={(e) => setSurn(e.target.value)} /> </label> </div> );

Dodajmo na početak komponente state-ove za njih:

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

Napravimo i child komponentu Child.js, neka ispisuje pozdrav u kome će se prikazivati uneseno ime. Takođe, u konzoli će se ispisivati string 'child render' pri svakom renderovanju ove komponente:

function Child({ name }) { console.log('child render'); return <h3>Hello {name}!</h3>; }

Dodajmo Child u razmetu glavne komponente posle poslednjeg input-a i prosledićemo mu ime kao props:

<Child name={name} />

Importujmo ga u glavnu komponentu:

import Child from './Child';

A sada otvorimo konzolu i krenimo da unosimo ime i prezime u polja. Ovde ćemo videti da čak i pri unosu simbola u polje za prezime, naša child komponenta će se svaki put ponovo renderovati. Nema nikakvih problema, pošto je naša komponenta mala. Ali zamislite da bi ova komponenta prikazivala veliku količinu podataka i da se pritom, svaki put ponovo renderovala.

A sada hajde da obmotamo child komponentu u memo, i da vidimo kako će se renderovanje promeniti. Za početak importujmo u nju memo:

import { memo } from 'react';

Zatim napravimo novu promenljivu i dodelimo joj naš Child, obmotanog u memo. Dobićemo sledeće funkcionalno izražavanje:

const Child = memo( function Child({ name }) { console.log('child render'); return <h3>Hello {name}!</h3>; });

Otvorimo konzolu i krenimo ponovo da unosimo ime i prezime u polja. Sada vidimo da pri unosu prezimena, naša child komponenta se ne ponovo renderuje.

Treba zapamtiti da ovo neće raditi, ako se pri nepromenjenim props-ima menjaju state-ovi koje komponenta koristi ili context koji koristi promene.

Uzmite kod komponente App, koji smo radili na ovoj lekciji, ostavite u njemu samo prvi input. Napravite React komponentu Text, koja sadrži paragraf sa tekstom 'long text', i smestite je u App posle input-a.

U komponenti Text dodajte liniju console.log('text render');. Uverite se da pri unosu simbola u input komponenta Text ponovo renderuje svaki put.

A sada obmotajte komponentu Text u memo. Uverite se, da pri unosu simbola u input komponenta Text ne renderuje ponovo.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij