有没有办法在反应中判断它是本机反应还是网络反应?

Chr*_*ski 4 javascript reactjs react-native

我有一堆 React 组件,希望可以用于 Web 和本机。我试图这样做的方式是这样的:

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/>
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

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

我知道这违背了“一次学习,随处编写”的 React 哲学。

edd*_*yjs 5

就像你说的,这违背了 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/>
        }
    }
});
Run Code Online (Sandbox Code Playgroud)