三元运算符(Inline If without Else)

Posted

技术标签:

【中文标题】三元运算符(Inline If without Else)【英文标题】:Ternary Operator (Inline If without Else) 【发布时间】:2018-02-22 23:56:17 【问题描述】:

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

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

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

通过这样做,我得到:

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

然后我尝试了这个:

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

但是,它会在每个 onChange 上给我 BILLED:true(当点击 BILLED 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>
    );
  

这是同一类(组件)中的checkBoxOnChange() 函数:

   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);
  
代码有什么问题? 我不能在这种情况下使用内联语句吗? 有没有更好、更简洁的方法?

【问题讨论】:

【参考方案1】:

代码有什么问题?

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

我不能在这种情况下使用内联语句吗?

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

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

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

使用普通的if 语句。它更短且更具可读性:

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

【讨论】:

知道了。你能告诉我那将是初始化它们的理想位置吗?那么在this.state() 里面constructor 里面呢?因为 React 中没有全局变量的规定.. 是的,让它成为国家的一部分听起来是个好主意。当然,除了记录它之外,它还取决于您想要对值做什么。【参考方案2】:

但是,它在每次 onChange 时都会给我 BILLED:true (单击时 计费复选框)

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

var billed=false;

总是以false开头?

【讨论】:

是的,但它不应该在每次点击事件时改变吗? @NiladriSekharBasu 从您发布的代码中没有。为什么会呢? (它会改变,但改变不会持续对吗?因为这是一个局部变量)。 好的。明白我的错误了。但是,那么它应该在哪里声明呢?在this.state() 也许?由于 React 没有任何类变量的规定.. @NiladriSekharBasu 我认为您应该研究一下所谓的“受控组件”。

以上是关于三元运算符(Inline If without Else)的主要内容,如果未能解决你的问题,请参考以下文章

if/else 三元表达式中的 def

三元运算符

用三元运算符整理 javascript

学习笔记1(三元运算深浅拷贝动态参数全局变量与局部变量set数据类型 )

如何用三元运算符(?:)替换“if”语句?

JavaScript if判断三元运算符循环