如何在React Native中静默失败并捕获异常?

时间:2015-07-13 15:55:52

标签: react-native

当我的应用程序投入生产时,如果发生任何不良事件,我想避免出现红色错误屏幕。

我怎样才能这样做而不是抛出异常并显示错误屏幕,应用程序只需重新启动并返回主页?

2 个答案:

答案 0 :(得分:1)

虽然Richard Kho的回答可能有助于解决已知问题,但它无法提供"无声失败"。

有一些工具可以帮助您捕获所有错误,例如react-native-report-error。但是,它也无法无声地失败。

同时,通过几个步骤可以帮助您实现这一目标:

  1. 始终使用默认值初始化道具/州;
  2. 在Promises或try / catch块中包装函数;
  3. 这不是魔术,但有效。

答案 1 :(得分:0)

您需要拥有特定事件的侦听器,并在任何侦听器触发时触发回调。

例如,我有一个使用stats.gamma.fit(reqs) 缺少互联网连接的监听器,以及使用NetInfo打开/关闭的应用程序。我的AppStateIOS函数设置了两个属性:

getInitialState

然后我有一些听众和处理程序:

  getInitialState: function() {
    return {
      currentState: AppStateIOS.currentState,
      isConnected: null
    }
  },

我的 componentWillMount: function() { NetInfo.isConnected.fetch().done( (isConnected) => { this.setState({isConnected}); } ); }, componentDidMount: function () { AppStateIOS.addEventListener('change', this.handleAppStateChange); NetInfo.isConnected.addEventListener('change', this.handleConnectivityChange); }, componentWillUnmount: function() { AppStateIOS.removeEventListener('change', this.handleAppStateChange); NetInfo.isConnected.removeEventListener('change', this.handleConnectivityChange); }, handleAppStateChange: function(state) { this.setState({ currentState: state }); }, handleConnectivityChange: function(connection) { this.setState({ isConnected: connection }) }, 方法取决于我的状态:

render