⊗jsrtPmHkURf 12 of 47 menu

React'те реф менен иштоо үчүн useRef хуку

Бул сабакта биз реф менен иштейбиз. Ачык-айкын болушу үчүн, келгиле useRef хукун иши useState хуку менен салыштырып көрөлү.

Келгиле, баскычы бар компонент түзөлү:

return ( <div> <button> state click </button> </div> );

Компонентке useState импорттойлу:

import { useState } from 'react';

Дагы state стейтин түзөлү:

const [state, setState] = useState(0);

Эми баскычты чыкылдатканда, state 1ге көбөйүшү үчүн кылалы. Стейттин маанисин баскычтын текстинде эле чыгаралы:

<button onClick={handleStateClick}> state click: {state} </button>

handleStateClick баскычты чыкылдатуу функциясын сүрөттөйлү:

function handleStateClick() { setState(state + 1); }

Баскычты бир нече жолу басып, стейттин маанисинин көбөйүшүн көрөбүз.

Эми келгиле, стейт эмес, реф колдонуп, App компонентин түзөлү.

Башында, компонентке useRef импорттойлу:

import { useRef } from 'react';

Дагы ref рефин түзөлү. useRef хуку өзүнүн натыйжасында current деген жалгыз касиети бар реф объектин кайтарат, ал бизди кийинчерээк кызыктырат. Анын баштапкы маанисин 0 кылалы:

const ref = useRef(0);

Баскычка чыкылдатуу иштеткичин орнотойлу. Эсиңизде болсун, биз ref өзүн эмес, анын current касиетин окушубуз/өзгөртүшүбүз керек:

<button onClick={handleRefClick}> ref click: {ref.current} </button>

Баскычты чыкылдатуу үчүн функция кошойлу. Бул жерде биз, стейт менен болгон мисалдагыдай эле, current 1ге көбөйтөбүз. Стейттен айырмаланып, ал жерде маанисин өзгөртүү үчүн setState функциясы талап кылынса, рефтин касиети менен биз түздөн-түз иштейбиз:

function handleRefClick() { ref.current = ref.current + 1; }

Эми баскычты басабыз. Эмнени көрөбүз? Аны чыкылдатканда, баштапкы 0 бизде кандай болсо, ошондой кала берет, өзгөрбөйт.

Сиз, албетте, маани өзгөрөт деп шүбөлөнө баштай аласыз. Келгиле, муну текшерип көрөлү. Бул үчүн чыкылдатуу иштеткичине current маанисин консолго чыгаруучу дагы бир сап коду кошойлу:

function handleRefClick() { ref.current = ref.current + 1; console.log('ref click: ' + ref.current); }

Эми, браузердеги консолду ачып, баскычты дагы бир нече жолу басып, ар бир чыкылдатууда маанинин чындыгында өзгөрүп тургандыгын жана эч кандай алдамчылык жок экендигин көрөбүз.

Эми биз стейттен айырмаланып, рефтин мааниси өзгөргөндө компоненттин рендерилбегенин көрөбүз. Ошондуктан баскычтын текстинде ар дайым баштапкы 0 маанисин көрөбүз.

Ошентип, эгер сиздин маалыматыңыз рендеринг үчүн колдонулса, анда аны стейтте сактаңыз, ал эми рендеринг керек болбосо, мындай учурда рефти колдонуу натыйжалуураак болушу мүмкүн.

Сиздин компонентиңизде 'text' тексти бар абзац жана баскыч болсун. Баскычты ар бир жолу чыкылдатканда, абзацтын текстинин аягына үн белгиси кошулган кылыңыз. Муну стейт менен жасаңыз.

App компонентин түзөлү, бирок азыр стейттин ордуна рефти колдонуңуз. Баскычты басканда абзацтын тексти өзгөрбөй тургандыгына көзүңүз жетсин. Ошондой эле абзацтын текстин консолго чыгарууну кошуңуз, консолду ачып, текстинин чындыгында өзгөрүп тургандыгын көрүңүз.

Кыргызча
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
Биз сайттин иштөөсү, аналитика жана персонализация үчүн cookie файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу