Javascript 在React JSX中有条件地呈现组件部分
根据“您也可以对每个案例执行多个操作,并用逗号分隔。”下面的示例有效:Javascript 在React JSX中有条件地呈现组件部分,javascript,reactjs,conditional-statements,conditional-operator,react-jsx,Javascript,Reactjs,Conditional Statements,Conditional Operator,React Jsx,根据“您也可以对每个案例执行多个操作,并用逗号分隔。”下面的示例有效: var stop = false, age = 23; age > 18 ? ( alert("1"), alert("2") ) : ( stop = true, alert("Sorry, you are much too young!") ); 但我似乎不能像下面看到的那样做出同样的反应。我希望同时显示“是”和“否”按钮,但它只显示“否”按钮 返回( { 注释.映射(功能)(
var stop = false, age = 23;
age > 18 ? (
alert("1"),
alert("2")
) : (
stop = true,
alert("Sorry, you are much too young!")
);
但我似乎不能像下面看到的那样做出同样的反应。我希望同时显示“是”和“否”按钮,但它只显示“否”按钮
返回(
{
注释.映射(功能)(注释){
var title=note.content.substring(0,note.content.indexOf(“\n”));
title=title | | note.content;
var-toggleDeleteDialogs=this.state.isConfirming&¬e.id==notepad.selectedId;
var disableDelete=this.state.isConfirming&¬e.id!==notepad.selectedId;
返回(
-
{title}
{
切换删除对话框?
(
对
不
) : (
删除注释
)
}
);
}.绑定(本)
}
);
完整标记:
我的语法有问题吗?还是可以做得更优雅一些?小提琴似乎不起作用,但我可以重现这种行为。虽然它不会引发
相邻JSX元素必须被包装在一个封闭标记中的错误,但我怀疑这可能是它不起作用的原因,因为相邻元素实际上就是您试图做的事情
我认为最简单的解决方案是将两个元素封装在一个封闭的标记中,而不是用括号。小提琴似乎不起作用,但我可以重现这种行为。虽然它不会引发相邻JSX元素必须被包装在一个封闭标记中的错误,但我怀疑这可能是它不起作用的原因,因为相邻元素实际上就是您试图做的事情
我认为最简单的解决方案是将两个元素封装在一个封闭的标记中,而不是用括号括起来。您还可以返回一个JSX组件数组,例如
{
toggleDeleteDialogs ?
[<Button ... />, <Button ... />] :
<Button .../>
}
{
切换删除对话框?
[, ] :
}
您还可以返回JSX组件的数组,例如
{
toggleDeleteDialogs ?
[<Button ... />, <Button ... />] :
<Button .../>
}
{
切换删除对话框?
[, ] :
}
@Adam Stone是对的,问题是相邻的JSX元素没有包装在结束标记中
也就是说,你要求用最优雅的方式来解决这个问题
我对您的代码进行了以下更改:
- 使用此函数有选择地隐藏JSX元素:
var hideIfFalse=function(boolean){
return boolean? {} : {display : 'none'};
};
您可以这样使用:
<div style={hideIfFalse(toggleDeleteDialogs)} />
- 制作了一个
DeleteDialog
组件。它具有可重用的功能和自己的呈现逻辑,将其分离可以提高代码可读性:
var DeleteDialog=React.createClass({
render:function(){
var classes=this.props.classes;
return <div style={hideIfFalse(this.props.toggleDeleteDialogs)}>
<button onClick={this.props.onDelete} className="half">
Yes
</button>,
<button className="half" onClick={this.props.onCancelDelete}>
No
</button>
</div>
}
});
JSFiddle:@adamstone是对的,问题是有相邻的JSX元素没有包装在结束标记中
也就是说,你要求用最优雅的方式来解决这个问题
我对您的代码进行了以下更改:
- 使用此函数有选择地隐藏JSX元素:
var hideIfFalse=function(boolean){
return boolean? {} : {display : 'none'};
};
您可以这样使用:
<div style={hideIfFalse(toggleDeleteDialogs)} />
- 制作了一个
DeleteDialog
组件。它具有可重用的功能和自己的呈现逻辑,将其分离可以提高代码可读性:
var DeleteDialog=React.createClass({
render:function(){
var classes=this.props.classes;
return <div style={hideIfFalse(this.props.toggleDeleteDialogs)}>
<button onClick={this.props.onDelete} className="half">
Yes
</button>,
<button className="half" onClick={this.props.onCancelDelete}>
No
</button>
</div>
}
});
JSFiddle:这很有效,谢谢。我以前碰到过这个问题,但这次我没有想到。正如你所说,没有产生错误。这很有效,谢谢。我以前碰到过这个问题,但这次我没有想到。就像你说的,没有产生错误。太好了,我非常喜欢这个选项。谢谢。太好了,我很喜欢这个选项。谢谢。谢谢你的伟大创作思想。谢谢你的伟大创作思想。