We want to hear from you!Take our 2021 Community Survey!
Este sitio ya no se actualiza.Vaya a react.dev

Refs Must Have Owner Warning

Probablemente estés aquí porque recibió uno de los siguientes mensajes de error:

React 16.0.0+

Advertencia:

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).

versiones anteriores de React

Advertencia:

addComponentAsRefTo(…): solo un ReactOwner puede tener refs. Es posible que esté agregando un ref a un componente que no se creó dentro del método render de un componente, o si tiene varias copias cargadas de React.

Esto usualmente significa una de tres cosas:

  • Estás intentando agregar un ref a un componente de función.
  • Está intentando agregar un ref a un elemento que se está creando fuera de la función render() de un componente.
  • Tiene varias copias (en conflicto) de React cargadas (por ejemplo, debido a una dependencia npm mal configurada)

Refs en los componentes de función

Si <Foo> es un componente de función, no puedes agregarle una referencia:

// ¡No funciona si Foo es una función!
<Foo ref={foo} />

If you need to add a ref to a component, convert it to a class first, or consider not using refs as they are rarely necessary. Si necesitas agregar una referencia a un componente, primero conviértelo a una clase, o considera no usar las referencias ya que son raramente necesarias.

Cadenas de Ref fuera del método Render

Esto generalmente significa que estás intentando agregar una referencia a un componente que no tiene un propietario (es decir, no se creó dentro del método render de otro componente). Por ejemplo, esto no funcionará:

// ¡No funciona!
ReactDOM.render(<App ref="app" />, el);

Intenta renderizar este componente dentro de un nuevo componente de nivel superior que contendrá la referencia. Como alternativa, puedes utilizar una referencia de callback:

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

Considera si realmente necesitas una referencia antes de usar este enfoque.

Múltiples copias de React

Bower hace un buen trabajo de deduplicación de dependencias, pero npm no lo hace. Si no está haciendo nada (elegante) con refs, hay una buena probabilidad de que el problema no sea con sus refs, sino más bien un problema con tener varias copias de React cargadas en tu proyecto. A veces, cuando ingresa un módulo de terceros a través de npm, obtendrás una copia duplicada de la biblioteca de dependencias, y esto puede crear problemas.

Si estás utilizando npm… npm ls o npm ls react pueden ayudarte a iluminarte.

¿Es útil esta página?Edita esta página