当前位置:  开发笔记 > 编程语言 > 正文

React Native中的setTimeout

如何解决《ReactNative中的setTimeout》经验,为你挑选了4个好方法。

我正在尝试为React Native内置的iOS应用加载启动画面.我试图通过类状态,然后一个setTimeout函数来完成这个,如下所示:

class CowtanApp extends Component {
  constructor(props){
    super(props);
    this.state = {
      timePassed: false
    };
  }

  render() {
    setTimeout(function(){this.setState({timePassed: true})}, 1000);
    if (!this.state.timePassed){
      return ;
    }else{
      return (
        
      );
    }
  }
}

加载页面工作一秒钟,然后我想当setTimeout尝试将状态更改为true时,我的程序崩溃:'undefined不是对象(评估this.setState)'.我已经花了几个小时,有关如何修复的想法?



1> user1221780..:

经典的javascript错误.

setTimeout(function(){this.setState({timePassed: true})}, 1000)

setTimeout运行this.setState,this不再CowtanApp,但window.如果使用=>表示法定义函数,es6将自动绑定this.

setTimeout(() => {this.setState({timePassed: true})}, 1000)

或者,您可以let that = this;在您的顶部使用a render,然后切换引用以使用局部变量.

render() {
  let that = this;
  setTimeout(function(){that.setState({timePassed: true})}, 1000);


救了我,谢谢!我是js新手,这可能很愚蠢,但是有没有办法使用“传统” function(){}方法呢?

2> Phyo..:

为settimeout写一个新函数.请试试这个.

class CowtanApp extends Component {
  constructor(props){
  super(props);
  this.state = {
  timePassed: false
  };
}

componentDidMount() {
  this.setTimeout( () => {
     this.setTimePassed();
  },1000);
}

setTimePassed() {
   this.setState({timePassed: true});
}


render() {

if (!this.state.timePassed){
  return ;
}else{
  return (
    
  );
}
}
}


由于范围问题,它无法正常工作.在您的原始代码中,您有setTineout(function(){当在该块中时,这指的是您的组件之外的其他内容.此处的答案的替代方法是将setTimeout调用更改为"ES2015 Fat Arrow Sytax",如:setTimeout(()=> this.setState((...)

3> 小智..:

更改此代码:

setTimeout(function(){this.setState({timePassed: true})}, 1000);

到以下内容:

setTimeout(()=>{this.setState({timePassed: true})}, 1000); 



4> david m lee..:

在ReactNative .53上,以下对我有用:

 this.timeoutCheck = setTimeout(() => {
   this.setTimePassed();
   }, 400);

setTimeout是ReactNative库函数。
“ this.timeoutCheck”是我的变量,用于保存超时对象。
“ this.setTimePassed”是我在超时时调用的函数。

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有