⊗jsrtPmHkURD 13 of 47 menu

Използване на хука useRef за DOM в React

В един от предишните уроци споменахме, че рефите най-често се използват за достъп до DOM елементи.

Рефите ще дойдат на помощ тогава, когато, например, трябва да фокусирате елемент, да направите скрол или да изчислите неговия размер и позиция, или може би да използвате някои от неговите методи или свойства, тъй като за такива неща в React няма вградени методи.

Нека да разгледаме пример с input поле, как се прави това. Нека създадем компонент с input поле и бутон:

return ( <div> <input /> <button>focus</button> </div> );

Като начало, нека импортираме в компонента useRef:

import { useRef } from 'react';

И нека създадем реф ref в компонента. Инициализираме го със стойност null:

const ref = useRef(null);

Нека добавим към бутона манипулатор на клик:

<button onClick={handleClick}>focus</button>

За да имаме достъп до input полето, нека запишем нашия реф ref в атрибута ref на input полето. По този начин, когато React създава DOM възел за това input поле, той ще постави препратка към него в ref.current и ще можем да използваме методите на input полето:

<input ref={ref} />

И накрая, нека добавим функцията за обработка на клик, така че при кликване на бутона, input полето да получи фокус. Сега можем да направим това чрез рефа, в който се намира препратката към нашето input поле, като се обърнем към неговия метод focus:

function handleClick() { ref.current.focus(); }

Натискайте бутона и се убедете, че input полето получава фокус.

Вземете кода на компонента App, който написахме в този урок и направете така, че при кликване на бутона в input полето, освен поставяне на фокус, да се извършва и изчистване на полето за въвеждане. Използвайте за това свойството value на input полето.

Български
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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне