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?










share|improve this question


















  • 2




    It sounds like you need to clear the interval on componentDidUnmount
    – Sterling Archer
    Nov 8 at 17:49















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?










share|improve this question


















  • 2




    It sounds like you need to clear the interval on componentDidUnmount
    – Sterling Archer
    Nov 8 at 17:49













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?










share|improve this question













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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 8 at 17:48









Mark Dylan B Mercado

306




306








  • 2




    It sounds like you need to clear the interval on componentDidUnmount
    – Sterling Archer
    Nov 8 at 17:49














  • 2




    It sounds like you need to clear the interval on componentDidUnmount
    – 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












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);
}
}





share|improve this answer




























    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






    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














       

      draft saved


      draft discarded


















      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

























      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);
      }
      }





      share|improve this answer

























        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);
        }
        }





        share|improve this answer























          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);
          }
          }





          share|improve this answer












          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);
          }
          }






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 8 at 18:56









          Danilo

          1217




          1217
























              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






              share|improve this answer

























                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






                share|improve this answer























                  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






                  share|improve this answer












                  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







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 9 at 15:12









                  Josh Saiks

                  1




                  1






























                       

                      draft saved


                      draft discarded



















































                       


                      draft saved


                      draft discarded














                      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





















































                      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







                      Popular posts from this blog

                      鏡平學校

                      ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

                      Why https connections are so slow when debugging (stepping over) in Java?