2014-09-18 9 views
5

Piszę Mixin dla ReactJS. Chciałbym, żeby to było pewne sprawdzanie poprawności, ale tylko wtedy, gdy ReactJS jest używany w development mode.Jak mogę sprawdzić, czy ReactJS jest w trybie programowania z JavaScript?

Jak określić na podstawie kodu JavaScript, czy program ReactJS znajduje się w trybie programowania lub produkcji?

+0

Możesz ustawić zmienną '__DEV__' za pomocą pakietu internetowego. –

+0

Jeśli piszesz Mixin, prawdopodobnie nie chcesz zmusić użytkowników do samodzielnego odbudowania ReactJS. – danvk

Odpowiedz

10

Źródło ReactJS używa zmiennej o nazwie __DEV__ do śledzenia tego, ale nie jest ono eksportowane, więc jest niedostępne dla Twojego Mixina.

Jego konsekwencje są jednak. Kiedy złamiesz niezmiennik, na przykład tryb dev ReactJS da ci niezły opis tego, co poszło nie tak. W trybie produkcji generuje ogólny błąd informujący o użyciu wersji dev.

Możemy to wykorzystać, aby zbudować funkcję, która określa, czy React jest w trybie dev:

function isDevReact() { 
    try { 
    React.createClass({}); 
    } catch(e) { 
    if (e.message.indexOf('render') >= 0) { 
     return true; // A nice, specific error message 
    } else { 
     return false; // A generic error message 
    } 
    } 
    return false; // should never happen, but play it safe. 
}; 

To działa, ponieważ wyjątek za niewdrożenie metodę render różni się w dwóch trybach:

Development: "Invariant Violation: createClass(...): Class specification must implement a `render` method. Inline JSX script:16" 
Production: "Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings. Inline JSX script:16" 

Słowo "render" jest charakterystyczne dla niezmiennika, który naruszono, więc pojawia się tylko w wyjątku wersji deweloperskiej.

Powiązane problemy