我理解如何在简单的情况下使用它:
{(this.state.show) ? <span>Show</span> : null}
但如何将它用于大型DOM?
{ if (this.state.show) {
<span className={this.state.className}>Hi</span>
{this.state.text}
} else {
{this.state.text}
}
}
当然,它不起作用。怎么做正确?
答案 0 :(得分:5)
你不能这样做。我从你所提供的内容中看到了两个潜在的问题。首先,您只能返回一个DOM节点。其次,(这可能是因为它不是你的完整代码),你的大括号在语法上是不正确的。在不知道完整源代码的情况下,您可以尝试以下方法:
render: function() {
var header;
if (this.state.show) {
header = <span className={ this.state.className }>Hi</span>;
}
return <div>
{ header }
{ this.state.text }
</div>
}
答案 1 :(得分:1)
另一种做if-else的方法可以通过使用这里建议的IIFE来完成:https://facebook.github.io/react/tips/if-else-in-JSX.html。
{(() => {
if (this.state.show) {
<span className={this.state.className}>Hi</span>
{this.state.text}
} else {
{this.state.text}
}
})()}
答案 2 :(得分:0)
首先,您不能在一个语句中使用多个组件。 你必须这样做:
#subNav.lib {
background: #f39327;
}
好的,对于大型DOM,就像这样:
if (this.state.show) {
<span>
<span className={this.state.className}>Hi</span>
{this.state.text}
</span>
} else {
{this.state.text}
}
或
{() => {
{ if (this.state.show) {
<span>
<span className={this.state.className}>Hi</span>
{this.state.text}
</span>
} else {
{this.state.text}
}
}}
顺便说一句,如果 - else
,我已经创建了一个小型库来执行lisp样式{ this.state.show ? (
<span>
<span className={this.state.className}>Hi</span>
{this.state.text}
</span>
) : (
{this.state.text}
)
}