if和else条件都被执行

时间:2019-04-02 09:19:45

标签: javascript reactjs

我有一个if条件,它将改变状态值,而else部分为状态分配一个不同的值。但两者都在执行。如何避免这种情况。

getJobId = (event) => {
    const { appliedjobs } = this.props
    {appliedjobs && appliedjobs.map(job => {
        if(event.target.getAttribute('name')===job.id)
        {
            this.setState({applystatus:job.applystatus},()=>{
            console.log('====================================');
            console.log(this.state.applystatus);
            console.log('====================================');
            })
        }
        else if(event.target.getAttribute('name')!=job.id){     
            this.setState({applystatus:"apply now"},()=>{
            console.log('====================================');
            console.log("else ",this.state.applystatus);
            console.log('====================================');
            })
        }
      })}
      this.setState({
      jobid: event.target.getAttribute('name')
     }, () => this.sendJobId())
 }

3 个答案:

答案 0 :(得分:1)

您的else if语句可能返回相同的结果,因为!=可能返回假阳性结果。但是,您只需要一个else语句:

            if(event.target.getAttribute('name')===job.id) { ... }
            else { ... }

无论如何,如果setState语句肯定为假,这仅应在else块内执行if函数。

答案 1 :(得分:1)

您正在映射applicationConnectors: - type: http port: 5038 acceptorThreads: 1 selectorThreads: 2 acceptQueueSize: 1024 idleTimeout: 30 adminConnectors: - type: http port: 5037 idleThreadTimeout: 1 数组,并且在每次迭代期间在applidjobs语句的两个分支中都设置了state.applystatus。因此,if值将是上一次迭代中的一个值:

applystatus

我建议寻找与appliedjobs.map(job => { if (event.target.getAttribute('name') === job.id) { this.setState({ applystatus: job.applystatus }) } else if (event.target.getAttribute('name') != job.id) { this.setState({ applystatus: 'apply now' }) } }) this.setState({ jobid: event.target.getAttribute('name') }, () => this.sendJobId()) 属性匹配的作业,如果找到,将name设置为作业状态,否则将其设置为applystatus,则不需要映射或使用apply now语句:

if/else

答案 2 :(得分:0)

如果我了解您的代码,则应该执行以下操作:

getJobId = (event) => {
  const { appliedjobs } = this.props
  const jobid = event.target.getAttribute('name')
  const job = appliedjobs.find( j => j.id == jobid)
  const applystatus = job ? job.applystatus : "apply now"

  this.setState({ applystatus, jobid })
}

根据其ID查找作业并设置其状态,对吗?