2015-04-01 13 views
5

Chciałbym zapewnić ładne komunikaty o błędach dla niektórych moich komponentów, jak React robi, na przykład:Jak uzyskać nazwę komponentu nadrzędnego w React?

UWAGA: Każde dziecko w tablicy powinien mieć unikalny „klucz” rekwizyt. Sprawdź metodę renderowania MyComponent. Aby uzyskać więcej informacji, patrz fb.me/react-warning-keys.

Ta wiadomość zawiera informacje na temat kontekstu błędu. Wiem, że mogę go znaleźć w debugerze, ale chcę, aby debugowanie było łatwiejsze dla mnie i moich kolegów programistów.

+0

Czy istnieje powód, dla którego tego potrzebujesz? Składniki reaktywne działają na właściwości, które otrzymują, i ich stan wewnętrzny, a nie na hierarchię, do której należą. Nie jestem pewien, czy drukowanie komponentu nadrzędnego pomogłoby w debugowaniu, – Cristik

+0

Utworzono komponent do obsługi obietnic. Podoba mi się, ale użyłem go praktycznie wszędzie, więc chciałbym poprawić obsługę błędów. – mik01aj

+0

Zakładam, że procedury obsługi obietnic są wysyłane przez element nadrzędny, jeśli tak jest, ponieważ większość problemów pochodzi z procedur obsługi, a te są na poziomie nadrzędnym, wiesz gdzie jesteś. – Cristik

Odpowiedz

1

Choć nie jest jasne, w jaki sposób chcesz wykorzystać ten z Promise komponentu wymienionego w komentarzu, można spróbować to:

var componentName = this.constructor.displayName || this.constructor.name || undefined; 

Jest inspirowany this funkcji w kodzie ReactJS że patrzy na konstruktora aby utworzyć nazwę podczas sprawdzania poprawności elementu React.

Ale jeśli chcesz mieć nazwisko rodzica, nie jest to możliwe za pomocą żadnych udokumentowanych środków i najprawdopodobniej byłaby niestabilna, jeśli stworzysz kod w zależności od konkretnej implementacji wewnętrznej. Jest to jednokierunkowy przepływ informacji, więc dziecko nie potrzebuje linku do swojego rodzica za pomocą normalnej architektury.

Jeśli potrzebujesz imienia i nazwiska, musisz zdobyć wartość i przekazać ją dzieciom, które na pewno nie są pożądane.

+1

'this.constructor.displayName' wypisuje nazwę tego komponentu (co jest miłe, ale nie to, co chciałem, tak jak chciałem tego macierzystego), a' constructor.name' jest zawsze 'Window' dla mnie (najprawdopodobniej miałeś na myśli' this.constructor.name' tam). – mik01aj

+0

Gotcha. Nie rozumiałam, czego chciałeś, aby wartość tego rodzica była taka, ponieważ nie została opisana w Twoim pytaniu (przykład pokazuje, co przekazałem). Zaktualizowałem swoją odpowiedź, aby powiedzieć, że nie jest to możliwe przy użyciu jakichkolwiek obsługiwanych środków. – WiredPrairie