当前位置: 首页 > 知识库问答 >
问题:

列布局的React JSX条件呈现[重复]

华泳
2023-03-14

我想动态呈现JSX,如下所示;

<ColumnLayout container spacing={1}>
    <ColumnLayout item xs={9}>                    
        <b>{text}</b>
    </ColumnLayout>
    {showSubTextAndIcon ?
        <ColumnLayout item xs={2}>                    
            <span>{subText}</span>
        </ColumnLayout>
        <ColumnLayout item xs={1}>
            <Icon  />
        </ColumnLayout>
        : null
    }
</ColumnLayout>

因此,我希望仅当“showSubTextAndIcon”为true时,才渲染该子文本和图标。现在,上述方法不起作用,我得到一个语法错误,说:;

相邻的JSX元素必须包装在一个封闭的标记中。你想要一个JSX片段吗

这工作,如果我添加一个包装列布局。然而,当show SubTextAndIcon是真的时,这会扰乱我的布局。

{showSubTextAndIcon ?
        <ColumnLayout container spacing={1}>
            <ColumnLayout item xs={2}>                    
                <span>{subText}</span>
            </ColumnLayout>
            <ColumnLayout item xs={1}>
                <Icon  />
            </ColumnLayout>
        </ColumnLayout>
        : null
    }

注意:列布局是从材料ui库派生的。

共有3个答案

濮阳宜
2023-03-14

另一种方法是将组件包装在数组中,并为其提供键:

<ColumnLayout container spacing={1}>
    <ColumnLayout item xs={9}>                    
        <b>{text}</b>
    </ColumnLayout>
    {showSubTextAndIcon && [
        <ColumnLayout item xs={2} key={1}>                    
            <span>{subText}</span>
        </ColumnLayout>,
        <ColumnLayout item xs={1} key={2}>
            <Icon  />
        </ColumnLayout>
    ]}
</ColumnLayout>
堵雅健
2023-03-14

如果您想要一个单一的条件,那么您需要按照错误提示和您已经发现的那样包装您的元素。如果它破坏了你的布局,你可以改变你的CSS,或者用一个简单的

另一种解决方案是将相同的条件添加到要在该条件下显示的每个元素中,如:

<ColumnLayout container spacing={1}>
    <ColumnLayout item xs={9}>                    
        <b>{text}</b>
    </ColumnLayout>
    {showSubTextAndIcon &&
        <ColumnLayout item xs={2}>                    
            <span>{subText}</span>
        </ColumnLayout>}
    {showSubTextAndIcon &&
        <ColumnLayout item xs={1}>
            <Icon  />
        </ColumnLayout>}
</ColumnLayout>

霍弘厚
2023-03-14

您只需要片段,因为React需要一个数组或元素作为返回:

import React, { Fragment } from 'react';

把它包起来。


{showSubTextAndIcon &&
       <Fragment>
          <ColumnLayout item xs={2}>                    
              <span>{subText}</span>
          </ColumnLayout>
          <ColumnLayout item xs={1}>
              <Icon  />
          </ColumnLayout>
        </Fragment>
    }
 类似资料:
  • 如何使用JSX进行条件渲染? 例如,我这里有div,如果props的值为null,我想呈现文本“不知道”,否则如果props不等于null,则呈现props。 例如: 我试过了,但没有成功。知道我做错了什么吗? 提前感谢!

  • 我有一个。我想有条件地呈现一行,如下所示: 在我的控制器中,有变量实体,它有getter和setter。 有人能帮我一下吗?我是JSF的新手,这个错误可能很愚蠢,而且很容易解决,但请帮助我解决它。多谢了。 我正在发布我在尝试上面的代码时得到的输出。 此输出仅使用显示datatable,而不尝试有条件地呈现它。可以看到标题。

  • 对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:

  • 如何在样式组件中使用条件渲染来设置我的按钮类在React中使用样式组件? 在css中,我会这样做: 如果我尝试使用'

  • JSF的 @ViewScoped不可用,因为它与CDI冲突 提交表单时,JSF动态呈现组件的值变为空 有条件呈现的输入组件不更新值 未调用CommandButton/CommandLink/Ajax操作/Listener方法或未更新输入值 我能想到导致这种行为的几种情况: “rendered”似乎是基于backing bean中的值重新计算的,而不是UI中给出的新值(如果默认为1,则提交时再次为1

  • 我目前在使用PrimeFaces 4.0的dataTable中的列的呈现属性上有一个小问题。我的表中有一列不应该总是显示,所以我使用了它的呈现属性并从我的支持bean中获取值。这是第6列也是最后一列。dataTable位于一个p:对话框中,该对话框将显示在方法的末尾。 渲染属性似乎工作正常,因为当showColumn为false时,该列将不会显示,反之亦然,但存在一个问题。如图所示,“未找到记录”