【问题标题】:How do I conditionally include a tag in the middle of some HTML in React如何在 React 的一些 HTML 中间有条件地包含一个标签
【发布时间】:2015-01-17 21:40:21
【问题描述】:
我有一个Avatar React 组件,并且可以选择是否将其链接到个人资料。例如,如果您在用户个人资料上,您可能不希望它链接到个人资料,而是您想要自定义clickHandler。除了在链接之外的每个 if 和 else 中使用基本相同的 HTML 来执行 if/else 之外,还有更好的方法吗?下面是一些伪渲染代码,只是为了说明我的意思:
<div className={"Avatar Avatar--" + this.props.size} onClick={this.props.clickHandler}>
{if (this.props.link) {
<Link to="profile" params={{userId:this.props.user.id}}>
}
}
<img className="__avatarimage" src={this.props.user.avatar} />
{if (this.props.link) {
</Link>
}
}
</div>
【问题讨论】:
标签:
javascript
syntax
reactjs
react-jsx
【解决方案1】:
用途:
<div className={"Avatar Avatar--" + this.props.size} onClick={this.props.clickHandler}>
{ this.props.link ?
<Link to="profile" params={{userId:this.props.user.id}}>
<img className="__avatarimage" src={this.props.user.avatar} />
</Link>
: <img className="__avatarimage" src={this.props.user.avatar} /> }
您可以尝试通过提前定义 img 来消除双重定义:
var img = <img className="__avatarimage" src={this.props.user.avatar} />;
并使用以下方法嵌入它:
{img}
【解决方案2】:
我会创建一个函数来返回图像或链接中包含的图像,然后将其添加到 div。
var createAvatar = function() {
if (this.props.link) {
return <Link to="profile" params={{userId:this.props.user.id}}>
<img className="__avatarimage" src={this.props.user.avatar} />
</Link>;
} else {
return <img className="__avatarimage" src={this.props.user.avatar} />;
}
};
var avatar = createAvatar();
return <div className={"Avatar Avatar--" + this.props.size} onClick={this.props.clickHandler}>
{avatar}
</div>;