We want to hear from you!Take our 2021 Community Survey!
Ta witryna nie jest już aktualizowana.Przejdź do react.dev

Refs Must Have Owner Warning

Jesteś tu najprawdopodobniej z powodu jednego z dwóch błędów:

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

wcześniejsze wersje Reacta

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.

Zazwyczaj oznacza to jedną z trzech rzeczy:

  • Usiłujesz dodać referencję (ref) do komponentu funkcyjnego.
  • Próbujesz dodać referencję do elementu, który jest tworzony poza metodą render komponentu.
  • Masz załadowanych kilka (konfliktujących) wersji Reacta (np. z powodu źle skonfigurowanych zależności npm).

Referencje do komponentów funkcyjnych

Jeśli <Foo> jest komponentem funkcyjnym, nie możesz tworzyć do niego referencji:

// nie zadziała, jeśli Foo jest funkcją!
<Foo ref={foo} />

Jeśli musisz dodać referencję do komponentu, zamień go najpierw na klasę lub rozważ, czy na pewno potrzebujesz referencji.

Referencje tekstowe poza metodą render

Oznacza to najczęściej, że próbujesz dodać referencję do komponentu, który nie ma “właściciela” (czyli nie został stworzony wewnątrz metody render innego komponentu). Na przykład to nie zadziała:

// Nie działa!
ReactDOM.render(<App ref="app" />, el);

Spróbuj wyrenderować komponent wewnątrz jakiegoś komponentu-rodzica, który będzie przechowywać referencję. Możesz też użyć funkcji zwrotnej (ang. callback):

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

Zanim zdecydujesz się na takie rozwiązanie, upewnij się, czy na pewno potrzebujesz referencji.

Wiele kopii Reacta

Bower dobrze radzi sobie z usuwaniem zduplikowanych zależności, ale npm już nie. Jeśli nie robisz nic (szczególnego) z referencjami, jest spora szansa, że problem nie leży postronie Twoich referencji, a raczej w tym, że w Twoim projekcie znalazła się więcej niż jedna instancja Reacta. Czasem zaciągając zewnętrzny moduł z npm otrzymasz dodatkową kopię Reacta w bibliotece zależności. Może to powodować problemy.

Jeśli używasz npm… npm ls albo npm ls react mogą rzucić trochę światła na problem.

Is this page useful?Edytuj tę stronę