React Native SetTimeOut

时间:2015-10-21 16:38:54

标签: javascript reactjs settimeout react-native

我想在我的RN应用程序中使用计时器。我想在列表视图的顶部显示waiting...消息。这是场景,等待2.5秒将新项目添加到列表,同时向用户显示信息消息,然后等待1秒进行下一个周期,并且不显示waiting...消息。我怎样才能做到这一点?我尝试了很多组合,但它从未按预期工作。

render(){
        return (
          <View style={styles.container}>
            <Text style={styles.waiting}>
              {'waiting...'}
            </Text>
            <ListView
              dataSource={this.state.dataSource}
              renderRow={this.renderCell}
              automaticallyAdjustContentInsets={false}
              style={styles.listView}
              />
          </View>
        );
      }

2 个答案:

答案 0 :(得分:0)

如果我理解正确,请尝试使用此代码。希望这有帮助...

getInitialState: function() {
   return {
     showLoading : true,//To show 'Waiting Text in initial state.
   };
},

componentDidMount() {
   this.setTimeout( () => {
      this._hideLoadingView();//To hide 'Waiting' Text after 1 second
   },1000);
},

_hideLoadingView() {
   this.setState({
     showLoading: false, //set state to hide 'Waiting'
   });
},


render(){
    return (
      <View style={styles.container}>
        {this._loadingTextView()}
        <ListView
          dataSource={this.state.dataSource}
          renderRow={this.renderCell}
          automaticallyAdjustContentInsets={false}
          style={styles.listView}
          />
      </View>
    );
  },

_loadingTextView(){
  if(this.state.showLoading){//To show or hide 'Waiting'
  return( 
     <Text style={styles.waiting}>
     Waiting.....
     </Text>
   )
  }
}

答案 1 :(得分:0)

Phyo几乎是对的。唯一的问题是它只会开心一次。我不会在两者之间循环。以下可能会完成诀窍

getInitialState: function() {
   return {
     showLoading : true,//To show 'Waiting Text in initial state.
   };
},

 componentWillMount() {
  this._showLoadingView; // start by displaying the wait
},

_hideLoadingView() {
   this.setTimeout(this._showLoadingView,1000);
   this.setState({
     showLoading: false, //set state to hide 'Waiting'
   });
},
_showLoadingView(){
   // Do other fetch instructions here
   this.setTimeout(this._hideLoadingView,2500);
   this.setState({
     showLoading: true,
   });
},
render(){
    return (
      <View style={styles.container}>
        {this.textRender()}
        <ListView
         dataSource={this.state.dataSource}
         renderRow={this.renderCell}
         automaticallyAdjustContentInsets={false}
         style={styles.listView}
         />
      </View>
    );
  },

textRender(){
  if(this.state.showLoading){//To show or hide 'Waiting'
      return( 
         <Text style={styles.waiting}>
             Waiting.....
         </Text>
       )
  }
  else{
      return <View />
  }

}

如果你想使用this.setTimeout(推荐),请记得使用TimerMixin,否则使用setTimeout