⊗jsrtPmHkAMe 15 of 47 menu

API memo Reactissa

Ennen kuin tarkastelemme seuraavaa koukku, on tarpeen mainita hyödyllisestä API:sta memo, joka auttaa meitä välttämään komponentin uudelleenrenderöintiä, jos sen propit pysyvät muuttumattomina.

Käydään tämä läpi esimerkin avulla. Luodaan komponentti App, jossa on kaksi syöttökenttää, joihin oletettavasti syötetään etunimi ja sukunimi:

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

Lisätään komponentin alkuun niiden tilat:

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

Tehdään vielä lapsikomponentti Child.js, joka tulostaa tervehdyksen, jossa näytetään syötetty etunimi. Myös konsoliin tulostuu merkkijono 'child render' aina tämän komponentin renderöinnin yhteydessä:

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

Lisätään Child pääkomponentin verkkosivurakenteeseen viimeisen syöttökentän jälkeen ja välitetään sille etunimi propina:

<Child name={name} />

Tuodaan se pääkomponenttiin:

import Child from './Child';

Avataan nyt konsoli ja alettaan syöttää nimi ja sukunimi kenttiin. Tässä näemme, että vaikka syöttäisimme merkkejä sukunimikenttään, lapsikomponenttimme piirtyy uudelleen joka kerta. Ei mitään ongelmaa, koska komponenttimme on pieni. Mutta kuvittele, jos tämä komponentti näyttäisi suuren määrän dataa ja samalla piirtyisi uudelleen joka kerta.

Kiedotaan nyt lapsikomponentti memo:n sisään ja katsotaan, kuinka renderöinti muuttuu. Tuodaan ensin siihen memo:

import { memo } from 'react';

Luodaan sitten uusi muuttuja ja annetaan sille arvoksi Child, kiedottuna memo:n sisään. Saamme seuraavan funktiolausekkeen:

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

Avataan konsoli ja syötetään uudelleen nimi ja sukunimi kenttiin. Nyt näemme, että sukunimeä syötettäessä, lapsikomponenttiamme ei piirretä uudelleen.

On muistettava, että tämä ei toimi, jos muuttumattomilla propeilla muuttuvat komponentin käyttämät tilat tai konteksti, joka käyttää muutoksia.

Ota komponentin App koodi, jota teimme tällä oppitunnilla, jätä siitä vain ensimmäinen syöttökenttä. Luo React komponentti Text, joka sisältää kappaleen tekstillä 'long text', ja sijoita se App:n syöttökentän jälkeen.

Komponentissa Text lisää rivin console.log('text render');. Varmista, että merkkejä syötettäessä syöttökenttään komponentti Text piirtyy uudelleen joka kerta.

Kiedota nyt komponentti Text memo:n sisään. Varmista, että merkkejä syötettäessä syöttökenttään komponentti Text ei piirry uudelleen toistamiseen.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää