我想使用df.apply
渲染几个项目来迭代它们并返回所需的元素。但是,在某些情况下将构建HTML。
以下是代码:
<span className="items-overview">
{
this.props.obj.items.map((item, index) => {
return (
(item.LeftParenthesis ? "<b>" + item.LeftParenthesis + "</b>" : "")
+ "<i>" + item.Description + "</i>"
+ (item.RightParenthesis ? "<b>" + item.RightParenthesis + "</b>" : "")
+ (item.LogicOperand && index < this.props.obj.Conditions.length - 1 ? " <span>" + item.LogicOperand + "</span>" : "") + " "
)
})
}
</span>
结果如下(假设只有一个项目):
方法我尝试过
答案 0 :(得分:2)
不要使用字符串:
return (
<span>
{
item.LeftParenthesis &&
<b>{item.LeftParenthesis}</b>
}
<i>{item.Description}</i>
{
item.RightParenthesis &&
<b>{item.RightParenthesis}</b>
}
{
item.LogicOperand && index < this.props.obj.Conditions.length - 1 &&
<span> {item.LogicOperand}</span>
}
</span>
)
这将为您的HTML层次结构添加更多span
,以便React可以正确呈现所有内容。这使用React's conditional rendering根据条件呈现元素。
这不是一种解决方法,这是有条件地渲染元素的正确方法。
答案 1 :(得分:0)
为什么不使用实际的反应组件而不是字符串?
您可以使用仅在条件为真时才呈现的组件 https://facebook.github.io/react/docs/conditional-rendering.html#inline-if-with-logical--operator
<span className="items-overview">
{this.props.obj.items.map((item, index) => {
return (
<span>
{item.LeftParenthesis && <b>{item.LeftParenthesis}</b>}
<i>{item.Description}</i>
{item.RightParenthesis && <b>{item.RightParenthesis}</b>}
{item.LogicOperand && index < this.props.obj.Conditions.length - 1 && ( <span>{item.LogicOperand}</span>)}
</span>
);
)}
</span>