Refs je skratka používaná pre referencie v React. Je to podobné ako kľúče v React. Je to atribút, ktorý umožňuje uložiť referenciu na konkrétne uzly DOM alebo prvky React. Poskytuje spôsob prístupu k React DOM uzlom alebo prvkom React a ako s nimi interagovať. Používa sa, keď chceme zmeniť hodnotu podriadeného komponentu bez použitia rekvizít.
Kedy použiť Ref
Referencie možno použiť v nasledujúcich prípadoch:
- Keď potrebujeme merania DOM, ako je riadenie zaostrenia, výber textu alebo prehrávanie médií.
- Používa sa pri spúšťaní imperatívnych animácií.
- Pri integrácii s knižnicami DOM tretích strán.
- Dá sa použiť aj ako pri spätných volaniach.
Kedy nepoužívať Ref
- Jeho použitiu sa treba vyhnúť pri všetkom, čo sa dá urobiť deklaratívne . Napríklad namiesto použitia OTVORENÉ() a Zavrieť() metódy na komponente Dialog, musíte odovzdať je otvorené oporu k tomu.
- Mali by ste sa vyhnúť nadmernému používaniu Ref.
Ako vytvoriť Ref
V React môžu byť odkazy vytvorené pomocou React.createRef() . Môže byť priradený k prvkom React cez ref atribút. Bežne sa priraďuje k vlastnosti inštancie pri vytváraní komponentu a potom sa naň môže odkazovať v rámci komponentu.
class MyComponent extends React.Component { constructor(props) { super(props); this.callRef = React.createRef(); } render() { return ; } }
Ako získať prístup k Ref
V Reacte, keď je odkaz odovzdaný prvku v metóde vykresľovania, odkaz na uzol môže byť prístupný cez aktuálny atribút odkazu.
const node = this.callRef.current;
Odkazuje na aktuálne vlastnosti
Referenčná hodnota sa líši v závislosti od typu uzla:
- Keď sa v elemente HTML použije atribút ref, ref sa vytvorí pomocou React.createRef() prijíma základný prvok DOM ako svoj prúd nehnuteľnosť.
- Ak je atribút ref použitý na komponente vlastnej triedy, potom objekt ref dostane namontované inštanciu komponentu ako jeho aktuálnu vlastnosť.
- Atribút ref nemožno použiť na funkčné komponenty pretože nemajú inštancie.
Pridajte referenciu k prvkom DOM
V nižšie uvedenom príklade pridávame odkaz na uloženie odkazu na uzol alebo prvok DOM.
import React, { Component } from 'react'; import { render } from 'react-dom'; class App extends React.Component { constructor(props) { super(props); this.callRef = React.createRef(); this.addingRefInput = this.addingRefInput.bind(this); } addingRefInput() { this.callRef.current.focus(); } render() { return ( <h2>Adding Ref to DOM element</h2> ); } } export default App;
Výkon
Pridať Ref do komponentov triedy
V nižšie uvedenom príklade pridávame odkaz na uloženie odkazu na komponent triedy.
Príklad
import React, { Component } from 'react'; import { render } from 'react-dom'; function CustomInput(props) { let callRefInput = React.createRef(); function handleClick() { callRefInput.current.focus(); } return ( <h2>Adding Ref to Class Component</h2> ); } class App extends React.Component { constructor(props) { super(props); this.callRefInput = React.createRef(); } focusRefInput() { this.callRefInput.current.focus(); } render() { return ( ); } } export default App;
Výkon
Referencie spätného volania
V reakcii existuje ďalší spôsob použitia odkazov, ktorý sa nazýva „ referencie spätného volania a dáva väčšiu kontrolu, keď sú referencie nastaviť a odstaviť . Namiesto vytvárania refs metódou createRef() umožňuje React spôsob, ako vytvárať refs odovzdaním funkcie spätného volania do atribútu ref komponentu. Vyzerá to ako kód nižšie.
this.callRefInput = element} />
Funkcia spätného volania sa používa na uloženie odkazu na uzol DOM vo vlastnosti inštancie a možno k nej pristupovať inde. Dá sa k nemu dostať takto:
this.callRefInput.value
Nižšie uvedený príklad pomáha pochopiť fungovanie spätných odkazov.
import React, { Component } from 'react'; import { render } from 'react-dom'; class App extends React.Component { constructor(props) { super(props); this.callRefInput = null; this.setInputRef = element => { this.callRefInput = element; }; this.focusRefInput = () => { //Focus the input using the raw DOM API if (this.callRefInput) this.callRefInput.focus(); }; } componentDidMount() { //autofocus of the input on mount this.focusRefInput(); } render() { return ( <h2>Callback Refs Example</h2> ); } } export default App;
Vo vyššie uvedenom príklade React zavolá spätné volanie „ref“ na uloženie odkazu na vstupný prvok DOM, keď komponent montuje , a keď komponent odpojí , zavolajte to pomocou nulový . Referencie sú vždy aktuálny pred komponentDidMount alebo componentDidUpdate požiarov. Prechod spätných odkazov medzi komponentmi je rovnaký, ako môžete pracovať s objektovými referenciami, ktoré sa vytvárajú pomocou React.createRef().
Výkon
Preposielanie referencie z jedného komponentu do iného komponentu
Ref forwarding je technika, ktorá sa používa na odovzdanie a ref cez komponent na jeden z jeho podriadených komponentov. Dá sa to vykonať pomocou React.forwardRef() metóda. Táto technika je obzvlášť užitočná pri komponenty vyššieho rádu a špeciálne používané v knižniciach opakovane použiteľných komponentov. Najbežnejší príklad je uvedený nižšie.
Príklad
import React, { Component } from 'react'; import { render } from 'react-dom'; const TextInput = React.forwardRef((props, ref) => ( )); const inputRef = React.createRef(); class CustomTextInput extends React.Component { handleSubmit = e => { e.preventDefault(); console.log(inputRef.current.value); }; render() { return ( this.handleSubmit(e)}> Submit ); } } export default App;
Vo vyššie uvedenom príklade je komponent TextInput ktoré má dieťa ako vstupné pole. Teraz prejdite alebo pošlite ďalej ref až po vstup, najprv vytvorte referenciu a potom odovzdajte svoju referenciu . Potom React prepošle referenciu na vpredRef funguje ako druhý argument. Ďalej postúpime tento argument ref . Teraz je možné získať prístup k hodnote uzla DOM vstup Ref.prúd .
Reagovať pomocou useRef()
Zavádza sa v Reagovať 16.7 a vyššie verzie. Pomáha získať prístup k uzlu alebo prvku DOM a potom môžeme interagovať s týmto uzlom alebo prvkom DOM, ako je zameranie vstupného prvku alebo prístup k hodnote vstupného prvku. Vráti objekt ref, ktorého .aktuálny vlastnosť inicializovaná na odovzdaný argument. Vrátený objekt pretrváva počas životnosti komponentu.
Syntax
const refContainer = useRef(initialValue);
Príklad
V nižšie uvedenom kóde useRef je funkcia, ktorá sa priraďuje k premennej, vstupRef a potom sa pripojí k atribútu s názvom ref vnútri elementu HTML, na ktorý chcete odkazovať.
function useRefExample() { const inputRef= useRef(null); const onButtonClick = () => { inputRef.current.focus(); }; return ( Submit ); }