我是React的新手,我在JSX文件中阅读了关于if / else语句的文档但是并不完全理解如何处理它。
我有一个组件:
var Favorite = React.createClass({
getInitialState: function() {
return {
category: this.props.category
}
},
handleClick: function() {
console.log(this.that);
var that = this;
$.ajax({
type: 'POST',
url: Routes.favorite_category_path(this.props.category, { format: 'json' }),
success: function(data) {
that.setState({ category: data });
}
});
},
render: function() {
var divClasses = classNames({
"post-upvote": true,
"post-upvote-upvoted": this.state.category.up_voted
});
return (
<div className={divClasses} onClick={this.handleClick}>
<div className="post-upvote-count">
{this.state.category.up_votes}
</div>
<div>
<div className="category-image">
<a>
<img src={this.props.category.category_picture} height="150" width="200"><h2><span>{this.props.category.name}</span></h2></img>
</a>
</div>
</div>
</div>
);
}
});
我想渲染相同的html加上&#34;隐藏&#34;使用&#34; category-image&#34;如果这个条件得到验证:
this.props.category.ancestry != 'null'
但是,我无法找到if / else语句的位置,因为不允许在此文件中添加它(favorite.js.jsx)。
我该怎么做?
答案 0 :(得分:3)
您需要在JSX中使用三元组合。
var assumption = <div>this is the assumption</div>
var elseCondition = <div>I guess I need to do this instead</div>
{condition ? assumption : elseCondition}
不是简单地使用由我所展示的有效JSX代码组成的变量,而是可以渲染整个组件(这实际上是相同的)。
所以,你的if条件只是检查值是 this.props.category.ancestry 非null(真实)所以你的三元组只需看起来像这样,
{this.props.category.ancestry ? assumption : elseCondition}
答案 1 :(得分:1)
您可以做的是:
<div className={'category-image' + this.props.category.ancestry ? 'hidden' : ''}>
另外,为什么不使用已经拥有的classNames模块来实现这一目标?否则,您也可以使用Chris提到的三元运算符。
答案 2 :(得分:1)
你可以使用like;
<div>
{!this.props.category.ancestry &&
<div className='category-image'>
//content
</div>
}
</div>