【问题标题】:React-native componentWillUnmount not being called未调用 React-native componentWillUnmount
【发布时间】:2016-12-16 17:33:30
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 我也遇到了同样的问题。你有解决这个问题的办法吗?
  • 对我来说,当应用程序在后台(按下后退按钮)时甚至不会触发

标签: javascript android react-native


【解决方案1】:

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

【讨论】:

  • 感谢您的信息,但这与我的问题无关。
  • @Railton 我不知道为什么没有调用 componentWillUnmount,但是这个答案与您的问题有关,因为您可以收听“背景”的 AppState 事件并在处理程序
  • 我希望应用程序继续在后台运行,以便在切换到后台时无法进行代码清理。
  • 正是我需要的。谢谢!
【解决方案2】:

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

问题在于,当组件安装时,eventListeners 正在附加,但在 componentWillUnmount 时没有分离。

【讨论】:

    【解决方案3】:

    如果您使用的是 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();
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        相关资源
        最近更新 更多