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 atributorefpara um nó JSX, React definirá sua propriedadecurrent.
Ressalvas
createRefsempre retorna um objeto diferente. É equivalente a escrever{ current: null }sozinho.- Em um componente de função, você provavelmente deseja
useRefem 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> </> ); }