createRef
cria um objeto ref que pode conter um valor arbitrário.
class MyInput extends Component {
inputRef = createRef();
// ...
}
Referência
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();
// ...
Parâmetros
createRef
não recebe parâmetros.
Retorna
createRef
retorna um objeto com uma única propriedade:
current
: Inicialmente, é definido comonull
. Você pode, mais tarde, defini-lo para outra coisa. Se você passar o objeto ref para React como um atributoref
para um nó JSX, React definirá sua propriedadecurrent
.
Ressalvas
createRef
sempre retorna um objeto diferente. É equivalente a escrever{ current: null }
sozinho.- Em um componente de função, você provavelmente deseja
useRef
em vez disso, que sempre retorna o mesmo objeto. const ref = useRef()
é equivalente aconst [ref, _] = useState(() => createRef(null))
.
Uso
Declarando um ref em um componente de classe
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 agora você passar ref={this.inputRef}
para um <input>
em seu JSX, React preencherá this.inputRef.current
com o nó DOM de entrada. Por exemplo, aqui está como você faz um botão que foca na entrada:
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}> Focus the input </button> </> ); } }
Alternativas
Migrando de uma classe com createRef
para uma função com useRef
Recomendamos o uso de componentes de função em vez de componentes de classe em código novo. 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}> Focus the input </button> </> ); } }
Quando você converte 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}> Focus the input </button> </> ); }