我是reactjs的新手,我正尝试使用三元运算符根据条件渲染jsx,但会引发错误:Line 22: Expected an assignment or function call and instead saw an expression no-unused-expressions
。
这是代码:
const posts = this.state.posts.length > 0 ?
this.state.posts.map(elem=>{
<div class="col s12 m7">
<h2 class="header">{elem.title}</h2>
<div class="card horizontal">
<div class="card-stacked">
<div class="card-content">
<p>{elem.body}</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
})
:null;
我尝试在圆括号
this.state.posts.length > 0
中包含( )
为true的第一个返回值,但效果不好。提前致谢。
最佳答案
您需要从传递给map
方法的函数中返回jsx。
在传递给return
方法的函数内使用map
。
const posts =
this.state.posts.length > 0
? this.state.posts.map(elem => {
return (
<div className="col s12 m7">
<h2 className="header">{elem.title}</h2>
<div className="card horizontal">
<div className="card-stacked">
<div className="card-content">
<p>{elem.body}</p>
</div>
<div className="card-action">
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
);
})
: null;
您也可以将
()
用于隐式return
。const posts =
this.state.posts.length > 0
? this.state.posts.map(elem => (
<div className="col s12 m7">
<h2 className="header">{elem.title}</h2>
<div className="card horizontal">
<div className="card-stacked">
<div className="card-content">
<p>{elem.body}</p>
</div>
<div className="card-action">
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
))
: null;
还将jsx中的
className
用于class
。关于javascript - 通过三元运算符映射的数组分配失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56716987/