Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript componentDidMount函数中的setinterval是否会在每次运行时创建一个新线程?_Javascript_Reactjs - Fatal编程技术网

Javascript componentDidMount函数中的setinterval是否会在每次运行时创建一个新线程?

Javascript componentDidMount函数中的setinterval是否会在每次运行时创建一个新线程?,javascript,reactjs,Javascript,Reactjs,我正在创建一个简单的web应用程序,其中时间每毫秒显示和更新一次。我的代码如下: class Time extends React.Component { constructor(props) { super(props); this.state = { date: "", time: "" } this.updateTime = this.updateTime.bind(this); }

我正在创建一个简单的web应用程序,其中时间每毫秒显示和更新一次。我的代码如下:

class Time extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      date: "",
      time: ""
    }
    this.updateTime = this.updateTime.bind(this);
  }

  componentDidMount() {
    this.interval = setInterval(this.updateTime, 1);
  }

  componentWillUnmount() {
    clearInterval(this.interval);
  }

  updateTime() {
    let dateObject = new Date();
    let date = dateObject.toDateString();
    let hour = dateObject.getHours().toString();
    let minute = dateObject.getMinutes().toString();
    let second = dateObject.getSeconds().toString();
    let millisecond = dateObject.getMilliseconds().toString();
    let time = hour + " : " + minute + " : " + second + " : " + millisecond;
    this.setState({
      date: date,
      time: time
    });
  }

  render() {
    return (
      <div>
        <TitleBar/>
        <div className="time-div">
          <p className="date-txt" value={this.state.date}> {this.state.date} </p>
          <p className="time-txt" value={this.state.time}> {this.state.time} </p>
        </div>
      </div>
    );
  }
}

export default Time;
上课时间延长React.Component{
建造师(道具){
超级(道具);
此.state={
日期:“,
时间:“
}
this.updateTime=this.updateTime.bind(this);
}
componentDidMount(){
this.interval=setInterval(this.updateTime,1);
}
组件将卸载(){
clearInterval(这个.interval);
}
更新时间(){
让dateObject=新日期();
让date=dateObject.toDateString();
让hour=dateObject.getHours().toString();
让minute=dateObject.getMinutes().toString();
设second=dateObject.getSeconds().toString();
设毫秒=dateObject.GetMillimes().toString();
让时间=小时+“:“+分钟+”:“+秒+”:“+毫秒;
这是我的国家({
日期:日期:,
时间:时间
});
}
render(){
返回(

{this.state.date}

{this.state.time}

); } } 导出默认时间;
考虑到componentDidMount函数在装入Time组件时运行,我的问题如下:

此componentDidMount函数中的setInterval函数是否在每次间隔运行时都记得自己?或者,它是否会再次运行componentDidMount函数,并且其中的setInterval函数会创建一个新线程

基本上,我想问的是,这个程序的运行方式是:

  • 组件是挂载的吗?每毫秒检查-->setInterval以运行updateTime函数-->组件是否已装载?选中-->“returning to same”setInterval函数以继续updateTime函数的下一个间隔-->。。。等 或
  • 组件是挂载的吗?每毫秒检查-->setInterval以运行updateTime函数-->组件是否已装载?检查-->“不记得”初始setInterval函数,并在继续初始setInterval函数-->的同时启动新的间隔。。。等等
  • componentDidMount()
    仅在初始渲染时运行,而不在状态更新时运行。 所以当你用过

      componentDidMount() {
        this.interval = setInterval(this.updateTime, 1);
      }
    
    setInterval
    将首先启动,此过程将在后台继续运行

    直到您
    卸载
    您的组件,在这种情况下,
    将对
    设置间隔
    进行清理

      componentWillUnmount() {
        clearInterval(this.interval);
      }
    
    当然,伙计:)快乐的编码。。。我建议你调查一下useffect()钩子。。。钩子很可怕。。。