Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React JSX中有条件地呈现组件部分_Javascript_Reactjs_Conditional Statements_Conditional Operator_React Jsx - Fatal编程技术网

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:

      这很有效,谢谢。我以前碰到过这个问题,但这次我没有想到。正如你所说,没有产生错误。这很有效,谢谢。我以前碰到过这个问题,但这次我没有想到。就像你说的,没有产生错误。太好了,我非常喜欢这个选项。谢谢。太好了,我很喜欢这个选项。谢谢。谢谢你的伟大创作思想。谢谢你的伟大创作思想。