我的本机应用程序中有一个非常奇怪的行为。我将其追溯到一个最小的例子。
我有一个带有两个组件的SwitchNavigator。第一个组件不执行任何操作,仅在2000ms之后导航到第二个组件。第二个Component的render方法内部有一个错误(例如,它尝试呈现一些未定义的内容“ test.error”)。
代码组件2:
resolve(c, img, 0, height, 100, 60)
在开发过程中,我得到一个正常的“死亡红屏”,告诉我“ ReferenceError:ReferenceError:未定义测试”。这是预期的行为。 但是在发行版本中,该应用程序无提示地失败,并且仅显示空白屏幕。没有应用程序崩溃。
更多信息: 当组件安装后显示错误部分时,同一应用程序确实会在发行版本中崩溃(如预期)。
组件2-预期崩溃:
render = () => {
return (
<View>
{
test.error
}
</View>
)
}
其他信息:
版本:
答案 0 :(得分:1)
对于有相同问题的任何人。它与bugsnag或反应导航无关。
问题在于,render方法内部的错误不会在释放模式下使应用程序硬崩溃。我认为原因在于React 16和ErrorBoundary功能。
我的解决方法是在App.js中添加一个ErrorBoundary(请参见https://reactjs.org/docs/error-boundaries.html)。现在,我可以在这里处理错误并将其报告给bugsnag。
componentDidCatch = (e, message) => {
bugsnag.notify(e);
Alert.alert(
I18n.t('GLOBAL__FATAL_ERROR'),
I18n.t('GLOBAL__FATAL_ERROR_MESSAGE'),
[
{
text: I18n.t('GLOBAL__FATAL_ERROR_RESTART'),
onPress: () => BackHandler.exitApp()
}
]
);
};