We want to hear from you!Take our 2021 Community Survey!
Este site não é mais atualizado.Vá para pt-br.react.dev

Aviso de Refs Precisam Ter um Dono

Você provavelmente está aqui porque recebeu uma das seguintes mensagens de erro:

React 16.0.0+

Warning:

Element ref was specified as a string (myRefName) but no owner was set. You may have multiple copies of React loaded. (details: https://fb.me/react-refs-must-have-owner).

Versões anteriores do React

Warning:

addComponentAsRefTo(…): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component’s render method, or you have multiple copies of React loaded.

Isso normalmente significa uma destas três coisas:

  • Você está tentando adicionar uma ref a um componente funcional.
  • Você está tentando adicionar uma ref a um elemento criado fora da função render() de um componente.
  • Você possui múltiplas (conflitantes) cópias do React carregadas (por exemplo, em função de uma dependência do npm configurada erroneamente).

Refs Em Componentes Funcionais

Se <Foo> é um componente funcional, você não pode adicionar uma ref nele:

// Não funciona se Foo é uma função!
<Foo ref={foo} />

Se você precisa adicionar uma ref a um componente, converta-o em uma classe primeiro, ou considere a não utilização de refs por elas serem raramente necessárias

Refs como Strings Fora do Método Render

Isso normalmente significa que você está tentando adicionar uma ref para um componente que não possui um dono (isto é, não foi criado dentro do método render de outro componente). Por exemplo, isso não funcionará:

// Não funciona!
ReactDOM.render(<App ref="app" />, el);

Tente renderizar esse componente dentro de um novo componente localizado em um nível acima e que irá possuir essa ref. De outro modo, você pode utilizar uma ref com callback:

let app;
ReactDOM.render(
  <App ref={inst => {
    app = inst;
  }} />,
  el
);

Reflita se você realmente precisa de uma ref antes de seguir essa abordagem.

Múltiplas Cópias do React

Bower faz um bom trabalho de desduplicar dependências, mas o npm não. Se você não está fazendo algo (extravagante) com refs, existe uma boa chance do problema não estar com suas refs, mas sim pelo fato de existir múltiplas cópias do React carregadas no seu projeto. Às vezes, quando você instala um módulo externo via npm, você irá obter uma cópia duplicada da dependência, e isso pode causar problemas.

Se você está usando npm… npm ls ou npm ls react podem ajudar.

Esta página é útil?Edite esta página