Refs je zkratka používaná pro Reference v Reactu. Je to podobné jako klíče v Reactu. Je to atribut, který umožňuje uložit odkaz na konkrétní uzly DOM nebo prvky React. Poskytuje způsob, jak získat přístup k uzlům React DOM nebo prvkům React a jak s nimi pracovat. Používá se, když chceme změnit hodnotu podřízené komponenty bez použití rekvizit.
Kdy použít Ref
Odkazy lze použít v následujících případech:
- Když potřebujeme měření DOM, jako je řízení fokusu, výběr textu nebo přehrávání médií.
- Používá se při spouštění imperativních animací.
- Při integraci s knihovnami DOM třetích stran.
- Lze jej také použít jako při zpětných voláních.
Kdy nepoužívat Ref
- Jeho použití je třeba se vyhnout všemu, co lze udělat deklarativně . Například místo použití OTEVŘENO() a zavřít() metod na komponentě Dialog, musíte předat je otevřeno podpěra k tomu.
- Měli byste se vyhnout nadměrnému používání Ref.
Jak vytvořit Ref
V React lze odkazy vytvořit pomocí React.createRef() . Může být přiřazen k prvkům React pomocí ref atribut. Běžně se přiřazuje vlastnosti instance, když je komponenta vytvořena, a pak lze odkazovat v rámci komponenty.
class MyComponent extends React.Component { constructor(props) { super(props); this.callRef = React.createRef(); } render() { return ; } }
Jak získat přístup k Ref
Když je v Reactu předán ref prvku uvnitř metody renderování, lze k odkazu na uzel přistupovat prostřednictvím aktuálního atributu ref.
const node = this.callRef.current;
Odkazuje na aktuální vlastnosti
Hodnota ref se liší v závislosti na typu uzlu:
- Když je v elementu HTML použit atribut ref, ref vytvořený pomocí React.createRef() přijme základní prvek DOM jako svůj aktuální vlastnictví.
- Pokud je atribut ref použit na vlastní komponentě třídy, pak objekt ref obdrží jízdní instance komponenty jako její aktuální vlastnost.
- Atribut ref nelze použít na funkční komponenty protože nemají instance.
Přidejte odkaz k prvkům DOM
V níže uvedeném příkladu přidáváme odkaz pro uložení odkazu na uzel nebo prvek 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ýstup
Přidat Ref ke komponentám třídy
V níže uvedeném příkladu přidáváme odkaz pro uložení odkazu na komponentu třídy.
Pří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ýstup
Reference zpětného volání
V reakci existuje další způsob použití odkazů, který se nazývá ' reference zpětného volání a poskytuje větší kontrolu, když jsou ref soubor a odstaveno . Namísto vytváření refs metodou createRef() umožňuje React způsob, jak vytvářet refs předáním funkce zpětného volání do atributu ref komponenty. Vypadá to jako níže uvedený kód.
this.callRefInput = element} />
Funkce zpětného volání se používá k uložení odkazu na uzel DOM ve vlastnosti instance a lze k ní přistupovat jinde. Lze k němu přistupovat následovně:
this.callRefInput.value
Níže uvedený příklad pomáhá pochopit fungování zpětných odkazů.
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;
Ve výše uvedeném příkladu React zavolá zpětné volání 'ref' pro uložení odkazu na vstupní prvek DOM, když komponenta montuje , a když součást odpojí , zavolejte to pomocí nula . Reference jsou vždy aktuální před komponentDidMount nebo componentDidUpdate požáry. Předávání zpětných odkazů mezi komponentami je stejné, jako můžete pracovat s objekty refs, které jsou vytvořeny pomocí React.createRef().
Výstup
Přesměrování ref z jedné součásti do jiné součásti
Ref forwarding je technika, která se používá pro předávání a ref přes komponentu k jedné z jejích podřízených komponent. To lze provést pomocí React.forwardRef() metoda. Tato technika je zvláště užitečná s komponenty vyššího řádu a speciálně používané v knihovnách opakovaně použitelných komponent. Nejběžnější příklad je uveden níže.
Pří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;
Ve výše uvedeném příkladu je komponenta TextInput která má jako vstupní pole dítě. Nyní k předání nebo předání ref dolů na vstup, nejprve vytvořte ref a poté předejte svůj ref dolů . Poté React předá referenci na vpředRef fungovat jako druhý argument. Dále předáme tento argument ref dolů . Nyní je k hodnotě uzlu DOM přístup vstupníRef.proud .
Reagovat pomocí useRef()
Je představen v Reagovat 16.7 a vyšší verze. Pomáhá získat přístup k uzlu nebo prvku DOM a pak můžeme s tímto uzlem nebo prvkem DOM interagovat, jako je zaměření vstupního prvku nebo přístup k hodnotě vstupního prvku. Vrací objekt ref, jehož .aktuální vlastnost inicializovaná na předaný argument. Vrácený objekt přetrvává po celou dobu životnosti komponenty.
Syntax
const refContainer = useRef(initialValue);
Příklad
V níže uvedeném kódu useRef je funkce, která je přiřazena k proměnné, vstupRef a poté připojen k atributu s názvem ref uvnitř elementu HTML, na který chcete odkazovat.
function useRefExample() { const inputRef= useRef(null); const onButtonClick = () => { inputRef.current.focus(); }; return ( Submit ); }