destroy the current page when navigating to another page using StackNavigator and stop all running process on...
up vote
0
down vote
favorite
I'm using react-native, when I try to navigate to another page using StackNavigator
the previous page is running on the background
This is 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' });
And I have a Guid.js like this
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>
)
}
The problem is, even I navigate to the main
page, I still getting the interval that I log inside the componentDidMount
of my Guide.js, and even going back on that page, it runs the componentDidMount
and run again my log, that means the interval is running again, what I want to do is after or while navigating to another page, I want to destroy the Guide.js, the page where I came from, and I have a page where I run WebView
I wan't to do the same thing for that page, how can I do that?
javascript react-native stack-navigator
add a comment |
up vote
0
down vote
favorite
I'm using react-native, when I try to navigate to another page using StackNavigator
the previous page is running on the background
This is 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' });
And I have a Guid.js like this
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>
)
}
The problem is, even I navigate to the main
page, I still getting the interval that I log inside the componentDidMount
of my Guide.js, and even going back on that page, it runs the componentDidMount
and run again my log, that means the interval is running again, what I want to do is after or while navigating to another page, I want to destroy the Guide.js, the page where I came from, and I have a page where I run WebView
I wan't to do the same thing for that page, how can I do that?
javascript react-native stack-navigator
2
It sounds like you need to clear the interval oncomponentDidUnmount
– Sterling Archer
Nov 8 at 17:49
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I'm using react-native, when I try to navigate to another page using StackNavigator
the previous page is running on the background
This is 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' });
And I have a Guid.js like this
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>
)
}
The problem is, even I navigate to the main
page, I still getting the interval that I log inside the componentDidMount
of my Guide.js, and even going back on that page, it runs the componentDidMount
and run again my log, that means the interval is running again, what I want to do is after or while navigating to another page, I want to destroy the Guide.js, the page where I came from, and I have a page where I run WebView
I wan't to do the same thing for that page, how can I do that?
javascript react-native stack-navigator
I'm using react-native, when I try to navigate to another page using StackNavigator
the previous page is running on the background
This is 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' });
And I have a Guid.js like this
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>
)
}
The problem is, even I navigate to the main
page, I still getting the interval that I log inside the componentDidMount
of my Guide.js, and even going back on that page, it runs the componentDidMount
and run again my log, that means the interval is running again, what I want to do is after or while navigating to another page, I want to destroy the Guide.js, the page where I came from, and I have a page where I run WebView
I wan't to do the same thing for that page, how can I do that?
javascript react-native stack-navigator
javascript react-native stack-navigator
asked Nov 8 at 17:48
Mark Dylan B Mercado
306
306
2
It sounds like you need to clear the interval oncomponentDidUnmount
– Sterling Archer
Nov 8 at 17:49
add a comment |
2
It sounds like you need to clear the interval oncomponentDidUnmount
– Sterling Archer
Nov 8 at 17:49
2
2
It sounds like you need to clear the interval on
componentDidUnmount
– Sterling Archer
Nov 8 at 17:49
It sounds like you need to clear the interval on
componentDidUnmount
– Sterling Archer
Nov 8 at 17:49
add a comment |
2 Answers
2
active
oldest
votes
up vote
1
down vote
accepted
Once timers are set, they runs asynchronously, you have to remove the timer if it's no longer needed when you leave the screen, like so:
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);
}
}
add a comment |
up vote
0
down vote
You can load components only when they are needed by using the new React-native Lazy API, here is some documentation on how to use: https://reactjs.org/docs/code-splitting.html
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Once timers are set, they runs asynchronously, you have to remove the timer if it's no longer needed when you leave the screen, like so:
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);
}
}
add a comment |
up vote
1
down vote
accepted
Once timers are set, they runs asynchronously, you have to remove the timer if it's no longer needed when you leave the screen, like so:
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);
}
}
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Once timers are set, they runs asynchronously, you have to remove the timer if it's no longer needed when you leave the screen, like so:
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);
}
}
Once timers are set, they runs asynchronously, you have to remove the timer if it's no longer needed when you leave the screen, like so:
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);
}
}
answered Nov 8 at 18:56
Danilo
1217
1217
add a comment |
add a comment |
up vote
0
down vote
You can load components only when they are needed by using the new React-native Lazy API, here is some documentation on how to use: https://reactjs.org/docs/code-splitting.html
add a comment |
up vote
0
down vote
You can load components only when they are needed by using the new React-native Lazy API, here is some documentation on how to use: https://reactjs.org/docs/code-splitting.html
add a comment |
up vote
0
down vote
up vote
0
down vote
You can load components only when they are needed by using the new React-native Lazy API, here is some documentation on how to use: https://reactjs.org/docs/code-splitting.html
You can load components only when they are needed by using the new React-native Lazy API, here is some documentation on how to use: https://reactjs.org/docs/code-splitting.html
answered Nov 9 at 15:12
Josh Saiks
1
1
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53213445%2fdestroy-the-current-page-when-navigating-to-another-page-using-stacknavigator-an%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
It sounds like you need to clear the interval on
componentDidUnmount
– Sterling Archer
Nov 8 at 17:49