首页 文章

使用计算来异步设置状态

提问于
浏览
0

我有一个 axios 调用,我想在我的组件中设置 setState,但其中一个状态变量需要一些条件逻辑,而不是设置状态。现在我有点怀疑,做这件事的最佳做法是什么

}).then(res =>
       this.setState({
           name: res.data.fname,
           sName: res.data.sname,
           percentage: res.data.percentage,
           result: res.data.result,
           showResult: true,
           type: this.typeHandler(this.state.percentage) // here a tried calling a handler to make my conditional setState call
       })
       )
       }

typeHandler = (percentage) =>{
    if(percentage >= 50){
        this.setState({type: 'succes'})
    }else{
        this.setState({type: 'failure'})
    }
    }

当然,这段代码的问题是它会发生异步,因此状态最初不会设置正确。

有没有更好的方法来改进这种逻辑,所以状态最初与其他属性一起设置,我可以包含我的逻辑?

我想替代方案是先获得百分比,然后再调用处理程序。

1 回答

  • 2

    您可以使用 res.data.percentage 而不是在 setState 中使用 state。此外,typeHandler 必须返回一个值,而不是将其设置为状态,因为您已经在 setState 中调用它

    }).then(res =>
           this.setState({
               name: res.data.fname,
               sName: res.data.sname,
               percentage: res.data.percentage,
               result: res.data.result,
               showResult: true,
               type: this.typeHandler(res.data.percentage) 
           })
       )}
    
    typeHandler = (percentage) =>{
        if(percentage >= 50){
            return 'succes';
        }else{
            return 'failure';
        }
    }
    

相关问题