React-native componentWillUnmount未被调用

时间:2016-12-16 17:33:30

标签: javascript android react-native

我在Android上运行,如果我使用硬件返回按钮退出应用程序,则会调用componentWillUnmount函数。但是,如果我使用方形按钮显示正在运行的应用程序列表并滑动关闭,则不会调用该函数。

有关如何检测应用程序何时关闭的任何想法,以便我可以清除计时器,保存数据等。

感谢。

4 个答案:

答案 0 :(得分:3)

您可以检查AppState Api,以获取有关检测当前状态前景或活动状态的信息。 https://facebook.github.io/react-native/docs/appstate.html

答案 1 :(得分:0)

我遇到了同样的问题。为了解决它,我没有将事件监听器附加到stateChange。相反,我只是查看componentDidMount()函数内的AppState.currentState。

问题是当组件挂载时,eventListeners正在附加,但却没有在componentWillUnmount上分离。

答案 2 :(得分:0)

您可以为您为硬件按钮编写的服装功能设置条件,例如(例如,对于 React Native Router Flux Actions.currentScene === 'Home'或您想要的其他条件。

答案 3 :(得分:0)

如果您使用的是react-navigation 4.x,则可以使用以下代码(从其他地方复制)。 我认为这个问题将在react-navigation 5.x中解决。

componentDidMount() {
  const {navigation} = this.props;
  this.focusListener = navigation.addListener('didFocus', () => {
  const focused = navigation.isFocused();
    if (focused) {
      console.log('mount');
    }
  });
  this.blurListener = navigation.addListener('willBlur', () => {
    console.log('unmount');
  });
}
componentWillUnmount() {
  this.focusListener.remove();
  this.blurListener.remove();
}