2014-09-18 22 views
5

ReactJS için bir Mixin yazıyorum. Bazı doğrulama yapmak istiyorum, ancak sadece development mode'da ReactJS kullanıldığında.ReactJS'nin JavaScript'ten geliştirme modunda olup olmadığını nasıl anlarım?

ReactJS'nin geliştirme veya üretim modunda olup olmadığını JavaScript'ten nasıl belirleyebilirim?

+0

Web paketi ile '__DEV__' değişkeni ayarlayabilirsiniz .. –

+0

Bir Karıştırıcı yazıyorsanız, muhtemelen kullanıcıları ReactJS'i yeniden oluşturmaya zorlamak istemezsiniz. – danvk

cevap

10

ReactJS kaynağı, bunu izlemek için __DEV__ adlı bir değişken kullanır, ancak dışa aktarılmaz, bu nedenle Karıştırmanız için kullanılamaz. Bununla birlikte, bunun sonuçları da vardır. Bir değişmezi bozduğunuzda, örneğin, dev modu ReactJS size neyin yanlış gittiğine dair güzel bir açıklama verecektir. Üretim modunda, dev sürümünü kullanmanız için genel bir hata verecektir.

Biz tepki olmadığını belirleyen bir işlevi oluşturmak için kullanabilir dev modundayken:

bir render yöntemi uygulanmaması bir istisna farklı olduğu için bu iki modda çalışır
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. 
}; 

:

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" 

"İşleniyor" sözcüğü, ihlal ettiğimiz değişmeze özgüdür, bu nedenle yalnızca sürüm sürümünün istisnasında gösterilir.

İlgili konular