有没有办法反应告诉它是否是原生或网络反应?

时间:2015-07-30 19:21:54

标签: javascript reactjs react-native

我有一堆反应组件,我希望我可以用于网络和原生。我试图这样做的方式是这样的:

React.createClass({
    getInitialState: function(){
        return {isMobile: <some way of tell is native or web>};
    },
    render: function(){
        if(this.state.isMobile){
            return <SomeIosComponent/>
        }
        else{
            return <div/>
        }
    }
});

我希望能够做到这一点,所以我可以保持逻辑相同的东西在网络和本机上看起来是相同的,这可能吗?它可以像{isMobile: (window ? false : true)}一样简单吗?或者窗口是否存在于native中,因此有一种方法可以在某个奇怪的原因中定义局部范围内的全局变量?

我知道这违反了React的理念&#34;一次学习,随时随地写作#34;

1 个答案:

答案 0 :(得分:4)

就像你说的那样,这违反了React哲学,所以我不推荐它。

但是,如果您确实想要使用此方法,则有一种方法可以确定您使用的React。这可能会让人觉得有点hacky,但React Native有许多React不具备的属性。因此,在编写组件时,可以检查React.View是否存在。如果是,则使用React Native。否则,您正在使用网络版。

React.createClass({
    getInitialState: function(){
        return {isMobile: React.View !== undefined };
    },
    render: function(){
        if(this.state.isMobile){
            return <SomeIosComponent/>
        }
        else{
            return <div/>
        }
    }
});