【问题标题】: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 分配值,因此原始值不会更改,但在发布版本中它允许分配。不确定哪种行为是正确的?

标签: javascript react-native operators release


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2017-11-16
    • 2020-05-03
    • 2022-06-22
    相关资源
    最近更新 更多