2016-08-10 3 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

당신은 타이머 var가 componentDidMount 함수에서만 사용 가능하다는 것을 이해합니다 - 사용되는 두 함수 모두에 접근 할 수있는 var를 생성해야합니다. 그러나 문제는 setInterval이 결코 실행되지 않는다고 제안하는 것 같습니다. –

답변

5

시간을 인스턴스 변수로 저장하고 구성 요소 마운트 해제시이를 지워야합니다. 예 :

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

componentWillUnmount() { 
    clearInterval(this._interval); 
} 
관련 문제