三元运算符(内联如果没有其他)

时间:2017-09-14 06:02:55

标签: reactjs ecmascript-6 inline ternary-operator

我在checkbox中有两个<form><form>分配了onChange={this.checkBoxOnChange},它会在表单中的每次更改时触发checkBoxOnChange(event){..}函数。我正在尝试映射(日志)状态(即是否已选中)。所以,我最初将那里的值视为false,因为它们未被检查然后在每个事件上我试图分别改变那里的值(即如果为假,则为真&反之亦然)

在关注this SO帖子后,我尝试了这个:

(event.target.value=='BILLDED') && billed=(!billed)       

通过这样做我得到:

  

语法错误:赋值表达式中的左侧无效

然后我尝试了这个:

(event.target.value=='BILLDED') ? (billed=(!billed)) : null        

但是,它会在BILLED:true onChange上给我checkbox(点击比尔render() { return ( <div> <form onChange={this.checkBoxOnChange}> <input type="checkbox" name="invoicestatus" value="BILLDED" />BILLDED<br /> <input type="checkbox" name="invoicestatus" value="PENDING" />PENDING<br /> </form> <ListData data={this.state.data}/> </div> ); } 时) 这是render方法中复选框的代码:

checkBoxOnChange()

这是同一个类(Component)中的 checkBoxOnChange(event){ var billed=false; var pending=false; // (event.target.value=='BILLDED') ? (billed=(!billed)) : null; (event.target.value=='BILLDED') && billed=(!billed) // (event.target.value=='PENDING') ? pending=(!pending) : null; console.log("BILLDED:"+billed+" PENDING:"+pending); } 函数:

HIGHLIGHTER_COLORS
  • 代码有什么问题?
  • 我不能在这种情况下使用内联声明吗?
  • 有没有更好,更简洁的方法?

2 个答案:

答案 0 :(得分:3)

  

代码出了什么问题?

您将事件处理程序中的billed变量初始化为false,这就是为什么您总是得到true而不是切换状态。

  

我不能在这种情况下使用内联声明吗?

你可以,你只需要将括号放在正确的位置:

(event.target.value == 'BILLDED') && (billed = !billed);
//                                   ^
  

有没有更好,更简洁的方法?

使用正常的if语句。它既简短又易读:

if (event.target.value == 'BILLDED') billed = !billed;

答案 1 :(得分:1)

  

然而,它给了我BILLED:每次onChange都是true(点击时)   BILLED复选框)

这不是因为你使用如下的局部变量

var billed=false;

始终以false开头?