为啥 React Native 操作符在调试和发布版本上表现不同

Posted

技术标签:

【中文标题】为啥 React Native 操作符在调试和发布版本上表现不同【英文标题】:Why React Native operators behave differently on debug and release builds为什么 React Native 操作符在调试和发布版本上表现不同 【发布时间】:2018-08-17 07:48:06 【问题描述】:

有谁知道为什么操作员在 react native (0.54.2) 调试和发布版本上表现不同?

这在调试时完美运行。如果usageTip不是空字符串并且我们是第一次加载,我们输入if并向用户显示usageTip:

if (this.props.usageTip =! '' && this.props.firstTimeLoading) 
    return (
        <Text style=styles.disclaimerTextStyle>this.props.usageTip</Text>
    );

但在发布时,if 行会以某种方式将 imageTip 设置为布尔值 true。那里发生了什么?

我也找到了一种让它在发布时工作的方法:

if (this.props.firstTimeLoading && (this.props.usageTip ==! '')) 
        return (
            <Text style=styles.disclaimerTextStyle>this.props.usageTip</Text>
        );
    

但是我很困惑为什么我的代码的第一个版本会这样?也很难找到问题,因为发布构建调试不是很容易。 (至少我不知道有什么简单的方法)

【问题讨论】:

您的 if 语句中有错字:this.props.usageTip =! '' => 应该是 this.props.usageTip != '' 谢谢,我刚刚意识到我已经在工作版本中修复了它,即使这里的示例没有修复。我想知道为什么它在调试时起作用?? 您是否启用了远程调试器? 是的。当在调试版本上尝试调试时,它在模拟器和设备上运行良好。现在我可能知道发生了什么。由于拼写错误,if 被解释为将布尔值分配给 this.props.usageTip。并且 if 在调试和发布版本中都被解释为 true,但不同的可能是调试版本不允许组件为 this.props 分配值,因此原始值不会更改,但在发布版本中它允许分配。不确定哪种行为是正确的? 【参考方案1】:

使用 React Native 时,您将在两种环境中运行 javascript 代码:

在大多数情况下,React Native 将使用 JavaScriptCore,即 JavaScript 为 Safari 提供动力的引擎。

使用 Chrome 调试时,所有 JavaScript 代码都在 Chrome 中运行 本身,通过 WebSockets 与本机代码通信。 Chrome 使用 V8 作为它的 JavaScript 引擎。

虽然这两种环境非常相似,但您最终可能会遇到一些不一致的情况。 To get More Detail

【讨论】:

以上是关于为啥 React Native 操作符在调试和发布版本上表现不同的主要内容,如果未能解决你的问题,请参考以下文章

Thunks 未出现在 React Native 调试器的操作列表中

在调试中工作,但在发布中不工作 |世博会 | react-native-unimodules

调试 React-Native 应用程序时如何在 Chrome devtools 中查看 React 选项卡?

为啥我们不在 react-native 中 gitignore ios/ 和 android/

调试和发布 apk 在 React Native 0.63.3 中不起作用

React Native 已经有了异步存储。为啥我应该在我的 react native 应用中使用 Redux 和 Redux Thunk?