Selecione Elementos DOM em React

Irakli Tchigladze 4 dezembro 2021
Selecione Elementos DOM em React

Em um ponto ou outro, todo desenvolvedor de JavaScript usou o método getElementById(). Leva um argumento id e retorna um elemento HTML com esse ID. Este método é extremamente útil para fazer mutações DOM manuais.

Pegar um nó de elemento HTML é uma necessidade comum. Muitos desenvolvedores com experiência em JavaScript, mas novos no framework React, querem saber como realizar esta operação no React.

Refs em React

Refs, abreviação de referências, são uma maneira fácil de acessar o DOM no React. Para vincular o elemento (ou componente) a uma referência, o elemento deve ter um atributo ref que seja igual ao seu ref. Um elemento de amostra <div> pode ser vinculado a testRef desta forma: <div ref={this.testRef}></div>. É uma boa prática armazenar instâncias ref em uma variável.

em componentes funcionais

Desde a introdução dos ganchos há cerca de dois anos, os componentes funcionais tornaram-se muito mais robustos. Se você estiver executando uma versão moderna do React (por exemplo, 16.8.0), pode importar o gancho useRef(), que pode ser usado para definir um ref. Aqui está um exemplo de um componente funcional que faz referência a uma variável aleatória durante a renderização:

function App() {
    const elementVariable = useRef(null)
    useEffect(() => console.log(elementVariable), [] )
    return (
        <div ref={elementVariable}>
           <h1></h1> 
        </div>
    )
}

Neste exemplo, definindo elementVariable igual à instância do gancho useRef(), estamos armazenando o nó HTML na variável.

O gancho não funcionará a menos que o elemento HTML tenha um atributo ref definido para o nome da variável.

Um argumento passado para o gancho useRef() especifica o valor inicial da instância ref. Assim que o elemento <div></div> for montado, a variável conterá o valor do nó HTML. Esta será a aparência do console:

em componentes de classe

Por muito tempo, usar componentes de classe foi a maneira padrão de criar componentes React interativos.

Desde o lançamento da versão 16.3, os desenvolvedores do React podem usar React.createRef() para criar um ref. A API pode ser diferente, mas os ganchos React.createRef() e useRef() criam essencialmente as mesmas instâncias ref.

Em componentes de classe, a instância ref é armazenada em uma propriedade de classe. Aqui está um exemplo:

class App extends Component {
  constructor(props){
    super(props)
    this.ref = React.createRef()
  }
  componentDidMount(){
    console.log(this.ref);
  }
  render() {
    return <h1 ref={this.ref}>Referenced Text</h1>;
  }
}

Se você olhar para o console, verá um objeto com a propriedade current que contém o nó HTML.

Os desenvolvedores que usam React versão > 16.3 devem usar uma sintaxe ligeiramente diferente para criar refs. Exemplo:

<div ref={(element) => this.ref = element}></div>

A referência criada dessa forma é chamada de retorno de chamada ref porque definimos o atributo ref para uma função de retorno de chamada que recebe o elemento HTML como um argumento e atribui esse valor à propriedade ref da instância da classe.

Irakli Tchigladze avatar Irakli Tchigladze avatar

Irakli is a writer who loves computers and helping people solve their technical problems. He lives in Georgia and enjoys spending time with animals.

LinkedIn