⊗jsrtPmHkAMe 15 of 47 menu

API memo στο React

Πριν εξετάσουμε το επόμενο hook, είναι απαραίτητο να αναφέρουμε και το χρήσιμο API memo, το οποίο μας βοηθά να αποφεύγουμε την επαναληπτική απόδοση ενός component, εάν τα props του παραμένουν αμετάβλητα.

Ας το εξετάσουμε με ένα παράδειγμα. Ας δημιουργήσουμε ένα component App, στο οποίο θα υπάρχουν δύο πεδία εισαγωγής (input), στα οποία, ας υποθέσουμε, εισάγονται το όνομα και το επώνυμό:

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> );

Ας προσθέσουμε στην αρχή του component states για αυτά:

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

Ας φτιάξουμε επίσης και ένα θυγατρικό component Child.js, ας εμφανίζει ένα χαιρετισμό, στον οποίο θα εμφανίζεται το όνομα που εισάγεται. Επίσης, στην κονσόλα θα εμφανίζεται η συμβολοσειρά 'child render' κατά κάθε απόδοση (rendering) αυτού του component:

function Child({ name }) { console.log('child render'); return <h3>Γεια σου {name}!</h3>; }

Ας προσθέσουμε το Child στο markup του κύριου component μετά το τελευταίο πεδίο εισαγωγής και ας του περνάμε ως prop το όνομα:

<Child name={name} />

Ας το εισάγουμε (import) στο κύριο component:

import Child from './Child';

Και ας ανοίξουμε την κονσόλα και ας πληκτρολογούμε στο πεδίο εισαγωγής το όνομα και το επώνυμό. Εδώ θα δούμε ότι ακόμη και κατά την εισαγωγή χαρακτήρων στο πεδίο για το επώνυμό, το θυγατρικό μας component θα ξανασχεδιάζεται κάθε φορά. Κανένα πρόβλημα, αφού έχουμε ένα μικρό component. Αλλά φανταστείτε εάν αυτό το component εμφάνιζε ένα μεγάλο όγκο δεδομένων και ταυτόχρονα, ξανασχεδιαζόταν κάθε φορά.

Και τώρα ας τυλίξουμε (wrap) το θυγατρικό component στο memo, και ας δούμε πώς αλλάζει η απόδοση. Αρχικά ας εισάγουμε (import) σε αυτό το memo:

import { memo } from 'react';

Στη συνέχεια, ας δημιουργήσουμε μια νέα μεταβλητή και ας της αναθέσουμε το Child μας, τυλιγμένο στο memo. Θα πάρουμε το ακόλουθο functional expression:

const Child = memo( function Child({ name }) { console.log('child render'); return <h3>Γεια σου {name}!</h3>; });

Ας ανοίξουμε την κονσόλα και ας εισάγουμε ξανά όνομα και επώνυμό στα πεδία. Τώρα βλέπουμε ότι κατά την εισαγωγή του επώνυμου, το θυγατρικό μας component δεν ξανασχεδιάζεται.

Πρέπει να θυμόμαστε ότι αυτό δεν θα λειτουργήσει, εάν με αμετάβλητα props αλλάζουν states που χρησιμοποιούνται από το component ή context που χρησιμοποιεί αλλαγές.

Πάρτε τον κώδικα του component App, που φτιάξαμε σε αυτό το μάθημα, αφήστε σ' αυτόν μόνο το πρώτο πεδίο εισαγωγής. Δημιουργήστε ένα React component Text, που να περιέχει μια παράγραφο με κείμενο 'long text', και τοποθετήστε το στο App μετά το πεδίο εισαγωγής.

Στο component Text προσθέστε τη γραμμή console.log('text render');. Βεβαιωθείτε ότι κατά την εισαγωγή χαρακτήρων στο πεδίο εισαγωγής το component Text ξανασχεδιάζεται κάθε φορά.

Και τώρα τυλίξτε (wrap) το component Text στο memo. Βεβαιωθείτε ότι κατά την εισαγωγή χαρακτήρων στο πεδίο εισαγωγής το component Text δεν ξανασχεδιάζεται επαναληπτικά.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañ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 για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη