createRef
cria um objeto ref que pode conter um valor arbitrário.
class MyInput extends Component {
inputRef = createRef();
// ...
}
Reference
createRef()
Chame createRef
para declarar um ref dentro de um componente de classe.
import { createRef, Component } from 'react';
class MyComponent extends Component {
intervalRef = createRef();
inputRef = createRef();
// ...
Parameters
createRef
não aceita parâmetros.
Returns
createRef
retorna um objeto com uma única propriedade:
current
: Inicialmente, é definido comonull
. Você pode alterá-lo posteriormente. Se você passar o objeto ref para o React como um atributoref
para um nó JSX, o React definirá sua propriedadecurrent
.
Caveats
createRef
sempre retorna um objeto diferente. É equivalente a escrever{ current: null }
você mesmo.- Em um componente de função, você provavelmente deseja
useRef
em vez, que sempre retorna o mesmo objeto. const ref = useRef()
é equivalente aconst [ref, _] = useState(() => createRef(null))
.
Usage
Declaring a ref in a class component
Para declarar um ref dentro de um componente de classe, chame createRef
e atribua seu resultado a um campo de classe:
import { Component, createRef } from 'react';
class Form extends Component {
inputRef = createRef();
// ...
}
Se você agora passar ref={this.inputRef}
para um <input>
em seu JSX, o React preencherá this.inputRef.current
com o nó do DOM de entrada. Por exemplo, aqui está como você cria um botão que foca o input:
import { Component, createRef } from 'react'; export default class Form extends Component { inputRef = createRef(); handleClick = () => { this.inputRef.current.focus(); } render() { return ( <> <input ref={this.inputRef} /> <button onClick={this.handleClick}> Focar o input </button> </> ); } }
Alternatives
Migrating from a class with createRef
to a function with useRef
Recomendamos o uso de componentes de função em vez de componentes de classe em códigos novos. Se você tiver alguns componentes de classe existentes usando createRef
, aqui está como você pode convertê-los. Este é o código original:
import { Component, createRef } from 'react'; export default class Form extends Component { inputRef = createRef(); handleClick = () => { this.inputRef.current.focus(); } render() { return ( <> <input ref={this.inputRef} /> <button onClick={this.handleClick}> Focar o input </button> </> ); } }
Quando você converter este componente de uma classe para uma função, substitua as chamadas para createRef
por chamadas para useRef
:
import { useRef } from 'react'; export default function Form() { const inputRef = useRef(null); function handleClick() { inputRef.current.focus(); } return ( <> <input ref={inputRef} /> <button onClick={handleClick}> Focar o input </button> </> ); }