使用StackNavigator导航到另一页面时销毁当前页面,并停止上一页的所有正在运行的进程

时间:2018-11-08 17:48:25

标签: javascript react-native stack-navigator

我正在使用react-native,当我尝试使用StackNavigator导航到另一页面时,上一页正在后台运行

这是App.js

import Login from './app/component/Login';
import Menu from './app/component/Menu';
import Guide from './app/component/additions/Guide';
import { StackNavigator } from 'react-navigation';

const Navigator = StackNavigator({
  login: {screen: Login},
  main: {screen: Menu},
  guide: {screen: Guide},
},{ headerMode: 'none' });

我有一个像这样的Guid.js

componentDidMount() {
  setInterval(() => {
    console.log('I do not leak');
  }, 1000);
}

render() {
  const {navigate} = this.props.navigation;
  return(
    <TouchableOpacity onPress={() => navigate('main')}>
      <Text> navigate to main </Text>
    </TouchableOpacity>
  )
}

问题是,即使我导航到main页面,我仍然得到了登录Guide.js的componentDidMount内的时间间隔,甚至回到该页面,它仍在运行componentDidMount并再次运行我的日志,这意味着该间隔再次运行,我想要做的是在导航至另一页面之后或同时,我想破坏Guide.js,即我所来自的页面,并且我有一个运行WebView的页面,我不想对该页面做同样的事情,该怎么做?

2 个答案:

答案 0 :(得分:1)

一旦设置了计时器,它们便会异步运行,如果您离开屏幕时不再需要该计时器,则必须将其删除,就像这样:

constructor(props) {
    this.timerID = null;
}

componentDidMount() {
    this.timerID = setInterval(() => {
        console.log('I do not leak');
    }, 1000);
}

/**
 * Frees up timer if it is set.
 */
componentWillUnmount() {
    if (this.timerID != null) {
        clearInterval(this.timerID);
    }
}

答案 1 :(得分:0)

您可以使用新的React-native Lazy API仅在需要时加载组件,这里有一些使用方法的文档:https://reactjs.org/docs/code-splitting.html