JSX 三元表达式对于 Map 的行为不同
JSX Ternary Expression Behaves Differently For Map
简单问题:
JSX 允许你 return 一个地图函数,它将由一堆 div 或图像元素或任何东西组成 而 不必将 JSX 表达式包装在一个元素。但是,如果您在没有 map 函数的情况下显式键入一系列 DIV,它就会对您大喊大叫。请参见下面的示例:
<div style={{display:'flex', justifyContent:'space-between'}}>
{
(this.props.label.exampleImages.length > 0)
? this.props.label.exampleImages.map((image, i)=>{
return <img src={image.url}
alt={image}
key={`image-${i}`}
style={{marginTop:10}}/>
})
:
// this throws error even though above is essentially doing the same thing
<div className="image-placeholder"></div>
<div className="image-placeholder"></div>
<div className="image-placeholder"></div>
}
</div>
这是为什么?他们评估的不是完全一样的东西吗?
不同之处在于,在三元表达式的第一部分中,您只 returning 一个值,即图像数组。但是,当您的 this.props.label.exampleImages.length > 0
语句 return 为假时,您正在 returning 多个值,这是没有意义的,如此处解释 docs.
您的数组周围已经有一个封闭的 div,即 <div style={{display:'flex', justifyContent:'space-between'}}>
。导致您出错的原因是您正在尝试按照以下方式执行某些操作:var a = arr.length > 0 ? 1 : 1 2 3
。这是无效的 javascript,因为您不能 return 三元表达式上的多个值。
首先,重要的是要记住 JSX 被编译为 JavaScript,这最终是 运行 与 JavaScript 语法规则。
在你的三元运算符中,每个部分都需要评估为一个值。例子
var myVar = maxValidNumStuff < getCurrItemNum() ? 'too many' : 'good'
maxValidNumStuff < getCurrItemNum()
计算为布尔值,其他部分计算为字符串。
Map 方法 per Mozilla 表明 .map
的 return 值是一个数组。
如果你在 map 之外查看 JSX 如何编译每个 <div>blah</div>
,你会发现你放置了多个表达式,这打乱了三元运算符想要的单个表达式。
简单问题:
JSX 允许你 return 一个地图函数,它将由一堆 div 或图像元素或任何东西组成 而 不必将 JSX 表达式包装在一个元素。但是,如果您在没有 map 函数的情况下显式键入一系列 DIV,它就会对您大喊大叫。请参见下面的示例:
<div style={{display:'flex', justifyContent:'space-between'}}>
{
(this.props.label.exampleImages.length > 0)
? this.props.label.exampleImages.map((image, i)=>{
return <img src={image.url}
alt={image}
key={`image-${i}`}
style={{marginTop:10}}/>
})
:
// this throws error even though above is essentially doing the same thing
<div className="image-placeholder"></div>
<div className="image-placeholder"></div>
<div className="image-placeholder"></div>
}
</div>
这是为什么?他们评估的不是完全一样的东西吗?
不同之处在于,在三元表达式的第一部分中,您只 returning 一个值,即图像数组。但是,当您的 this.props.label.exampleImages.length > 0
语句 return 为假时,您正在 returning 多个值,这是没有意义的,如此处解释 docs.
您的数组周围已经有一个封闭的 div,即 <div style={{display:'flex', justifyContent:'space-between'}}>
。导致您出错的原因是您正在尝试按照以下方式执行某些操作:var a = arr.length > 0 ? 1 : 1 2 3
。这是无效的 javascript,因为您不能 return 三元表达式上的多个值。
首先,重要的是要记住 JSX 被编译为 JavaScript,这最终是 运行 与 JavaScript 语法规则。
在你的三元运算符中,每个部分都需要评估为一个值。例子
var myVar = maxValidNumStuff < getCurrItemNum() ? 'too many' : 'good'
maxValidNumStuff < getCurrItemNum()
计算为布尔值,其他部分计算为字符串。
Map 方法 per Mozilla 表明 .map
的 return 值是一个数组。
如果你在 map 之外查看 JSX 如何编译每个 <div>blah</div>
,你会发现你放置了多个表达式,这打乱了三元运算符想要的单个表达式。