⊗jsrtPmHkAMe 15 of 47 menu

React даги memo API си

Кейинги хуқни кўриб чиқишдан олдин, фойдали memo API сини эслатиб ўтиш керак, у бизга компонентнинг пропслари ўзгармаган тақдирда қайта рендерингдан сақланишта ёрдам беради.

Буни мисолда кўриб чиқайлик. Иккита инпути бор 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šuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш