我有一个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())
}
答案 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查找作业并设置其状态,对吗?