为了账号安全,请及时绑定邮箱和手机立即绑定

在reactjs中设置timeinterval的问题

在reactjs中设置timeinterval的问题

蛊毒传说 2021-04-27 17:14:20
我尝试每隔5秒在设置的时间间隔内调用一个函数,但在TypeError中抛出错误:this.intialState不是一个函数componentDidMount() {         this.intialState();         setInterval(this.changeSelection,5000);     }    changeSelection(){         this.intialState();     }  TypeError: this.intialState is not a function
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

this在函数中失去其上下文。您可以changeSelection在构造函数中进行绑定


constructor() {

  super();

  this.changeSelection = this.changeSelection.bind(this);

  setInterval(this.changeSelection, 500);

}

或使其成为粗箭头函数,因为这些函数没有自己的this上下文,并且会采用父函数的上下文


changeSelection = () => {

  // code here

}


查看完整回答
反对 回复 2021-05-13
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

更新了5秒倒计时,使用 class Clock extends Component


    import React, { Component } from 'react';


    class Clock extends Component {


      constructor(props){

        super(props);

        this.state = {currentCount: 10}

      }


      timer() {

        this.setState({

          currentCount: this.state.currentCount - 1

        })

        if(this.state.currentCount < 1) { 

          clearInterval(this.intervalId);

        }

      }


      componentDidMount() {

        this.intervalId = setInterval(this.timer.bind(this), 1000);

      }


      componentWillUnmount(){

        clearInterval(this.intervalId);

      }


      render() {

        return(

          <div>{this.state.currentCount}</div>

        );

      }

    }


   export default Clock;


查看完整回答
反对 回复 2021-05-13
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

的arrow函数表达式是语法上紧凑的替代常规的函数表达式,虽然没有其自己的绑定到this


componentDidMount() { 

  this.intialState(); 

  setInterval(this.changeSelection,5000); 

}

changeSelection = () => { 

  this.intialState(); 

}


查看完整回答
反对 回复 2021-05-13
  • 3 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信