⊗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, მოდით ის გამოიტანოს m მისალოცი ტექსტი, რომელშიც აისახება შეყვანილი სახელი. ასევე კონსოლში დაიწერება სტრიქონი 'child render' ამ კომპონენტის ყოველი რენდერის დროს:

function Child({ name }) { console.log('child render'); return <h3>გამარჯობა {name}!</h3>; }

დავამატოთ Child მთავარი კომპონენტის ვერსტკაში ბოლო ინფუთის შემდეგ და პროფსად მივცეთ მას სახელი:

<Child name={name} />

იმპორტირება გავუკეთოთ მთავარ კომპონენტში:

import Child from './Child';

ახლა კი გავხსნათ კონსოლი და ინფუთების ველებში შევიყვანოთ სახელი და გვარი. აქ ჩვენ დავინახავთ, რომ გვარის ველში სიმბოლოების შეყვანისას even, ჩვენი ქვეკომპონენტი ყოველ ჯერზე გადაიხაზება. ამაში პრობლემა არაფერია, ბოლოსდაბოლოს ჩვენი კომპონენტი მცირეა. მაგრამ წარმოიდგინეთ, რომ ეს კომპონენტი გამოიტანდა დიდ მოცულობის მონაცემებს და ამავდროულად, მუდმივად გადაიხაზებოდა.

ახლა კი მოდით, შევუსაბამოთ ქვეკომპონენტი 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šuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა