javascript - api block 被调用 2 次,导致渲染组件两次,但条件得到正确检查

标签 javascript reactjs settimeout setinterval clearinterval

我在 setInterval 中使用了 3 个动态变量,
在状态

this.state={
   checked: true,
   currentHash:"some current hash",
   updating: true
}
在 componentDidMount 里面,我做了这样的事情
componentDidMount = () => {
        let timer
        timer = setInterval( (checked, currentHash, updating) => {
            try {
                this.setState({analysis:true});
                if(checked){
                    var generatedHash = "current generated hash";
                                if (currentHash !== generatedHash) {
                                    currentHash = generatedHash;
                                    if(updating){
                                        this.setState({updating:false})
                                        const updateResponse = this.props.sendFile(DOCUMENT_ANALYSIS, ""); // my api call
                                        
                                    }
                                    else{
                                        this.setState({analysis:false})
                                    }
                                }
                                else{
                                    this.setState({analysis:false})
                                }
                    clearInterval(timer);
                    this.componentDidMount();
                }
                else{
                    clearInterval(timer);
                    this.setState({analysis:false});
                    this.componentDidMount();
                }
               
            }
            catch (error) {
                console.log("Event error", error);
            }
           
        }, 10000, this.state.checked, this.state.currentHash, this.state.updating)
    }
间隔设置为 10 秒。但是在获得正确的状态数据之前,它调用了两次相同的函数。

最佳答案

你可以试试这个或者你可以试试 react hook 会更好

  componentDidMount =()=> {
     this.time();
   }


  time =()=>{
      let timer
    timer = setInterval( (checked, currentHash, updating) => {
        try {
            this.setState({analysis:true});
            if(checked){
                var generatedHash = "current generated hash";
                            if (currentHash !== generatedHash) {
                                currentHash = generatedHash;
                                if(updating){
                                    this.setState({updating:false})
                                    const updateResponse = this.props.sendFile(DOCUMENT_ANALYSIS, ""); // my api call
                                    
                                }
                                else{
                                    this.setState({analysis:false})
                                }
                            }
                            else{
                                this.setState({analysis:false})
                            }
                clearInterval(timer);
                this.componentDidMount();
            }
            else{
                clearInterval(timer);
                this.setState({analysis:false});
                this.componentDidMount();
            }
           
        }
        catch (error) {
            console.log("Event error", error);
        }
       
    }, 10000, this.state.checked, this.state.currentHash, this.state.updating)
  }

关于javascript - api block 被调用 2 次,导致渲染组件两次,但条件得到正确检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65002639/

相关文章:

reactjs - 如何在 React Native 中创建可拖动组件?

javascript - 在我的阵列上使用 axios 发送数据的问题

javascript - Angularjs - 动态 ng-options

javascript - 为什么这个函数在放置在 Promise 中时会被破坏?

javascript - React js中增量值的计算

javascript - 在 React 和 Express js 中使用 Stripe Checkout

javascript - 输入字段不会停止使用 jQuery 和 setTimeout() 重新填充

javascript - 取消为一个 ID 设置的多个超时

javascript - Firefox setTimeout(func, ms) 发送默认参数给回调

javascript - 在另一个 AngularJS 之后执行函数