2016-08-10 15 views
3

私は基本的なタイマーを反応ネイティブにしようとしていますが、動作しません。私はコンソールにエラーは表示されません。単にsetIntervalを無視します。私はTimerMixinの問題をES6で読んでいます(サポートされていません)。あなたは、それは単にここに示した最も単純な形式では動作しないよう?,だけで基本的なsetIntervalタイマーを使いたいのであればsetIntervalもsetTimeoutも反応しませんネイティブES6

import React, { Component } from 'react'; 
import { AppRegistry, Text } from 'react-native'; 

class HelloWorldApp extends Component { 

componentDidMount() { 
     console.log('COMPONENTDIDMOUNT') 
    //this.timer=  <--//This doesn't work either 
    var timer = setInterval(() => { 
     console.log('I do not leak!'); 
    }, 5000); 
    } 
componentWillUnmount() { 
    console.log('COMPONENTWILLUNMOUNT') 
    clearInterval(timer); 
} 
    render() { 
    return (
     <Text>Hello world!</Text> 
    ); 
    } 
} 

AppRegistry.registerComponent('HelloWorldApp',() => HelloWorldApp); 

enter image description here enter image description here

+0

コンソールには何も表示されますか? – zerkms

+0

あなたのリンクは明示的にブラウザのタイマーを実装していると言われています。私の推測では、これは 'ReferenceError'を持っているためコンパイルされていません:' componentWillUnmount'の 'timer'が定義されていません。 – Jack

+0

あなたはtimer varがcomponentDidMount関数でのみ利用可能であることを理解しています。使用されている両方の関数にアクセスできるvarを作成する必要がありますが、問題はsetIntervalが決して実行されないことを示唆しています。 –

答えて

5

時間をインスタンス変数として保存し、コンポーネントのアンマウント時にクリアする必要があります。例:

componentDidMount() { 
    this._interval = setInterval(() => { 
    // Your code 
    }, 5000); 
} 

componentWillUnmount() { 
    clearInterval(this._interval); 
} 
関連する問題