【问题标题】:Is there a way in react to tell if it is react native or web?有没有办法判断它是本机反应还是网络反应?
【发布时间】:2015-07-30 19:21:54
【问题描述】:

我有一堆 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/>
        }
    }
});

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

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

【问题讨论】:

  • 也许我遗漏了一些东西,但您的代码不需要更高级别的了解,因为您需要包含“react-native”或“react”但不能同时包含两者
  • 我可以在构建时用 gulp 做到这一点。虽然我想我也可以让它需要文件,这些文件只包含名称相同并且只是在构建时添加的组件。

标签: javascript reactjs react-native


【解决方案1】:

就像你说的,这违背了 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/>
        }
    }
});

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 2023-01-11
    • 2021-12-14
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    相关资源
    最近更新 更多