【发布时间】:2017-08-29 12:34:57
【问题描述】:
当我使用这条线时:
this.state.selectedJobType.length > 0 ?
''
:
this.setState({ jobTypeErrMsg: 'Please select at least one job type'});
它抛出错误:
警告应为赋值或函数调用,但看到的是 表达式:
【问题讨论】:
当我使用这条线时:
this.state.selectedJobType.length > 0 ?
''
:
this.setState({ jobTypeErrMsg: 'Please select at least one job type'});
它抛出错误:
警告应为赋值或函数调用,但看到的是 表达式:
【问题讨论】:
因为三元运算符在基本条件下返回值,而您正在使用三元运算符更新状态,这就是原因。
condition ? expr1 : expr2;
三元运算符执行表达式[期望表达式应该产生某个值,可以是函数调用或直接任何值]并返回该表达式的结果。
使用 if 条件代替三元运算符,如下所示:
if(this.state.selectedJobType.length)
this.setState({ jobTypeErrMsg: 'Please select at least one job type'})
三元运算符根据条件分配值,如下所示:
let a = 0==0 ? 1 : 0;
或者你可以在 JSX 中使用 conditional rendering,像这样:
<div>{ 0==0 ? 'true' : 'false' }</div>
或者根据条件调用其他函数:
1==1 ? a() : b();
DOCs:
根据条件返回两个表达式之一。如果条件 为真,运算符返回 expr1 的值;否则,它 返回 expr2 的值。
【讨论】: