【问题标题】:Render a component only when a condition is fulfilled, it shows 0 otherwise仅在满足条件时才渲染组件,否则显示 0
【发布时间】:2021-07-15 22:32:00
【问题描述】:

我希望仅在条件为真时才显示组件,否则不显示任何内容。但在这种情况下,当条件不满足时,它会显示零 0

这是代码:

  const documents = [
    { types: [{}], value: 'good' },
    { types: [], value: 'bad' },
    { types: [{}, {}, {}], value: 'good' },
    { types: [{}], value: 'bad' }
  ];
  const toCheck = 'good';
  return (
    documents.filter((a) => a.types.length && a.value === toCheck).length && (
      <div>render this component</div>
    )
  );

当过滤器的结果大于零时,组件被渲染,当结果为0时,它显示一个0。当条件不为真时,我不想显示任何内容。

如何实现?

【问题讨论】:

    标签: javascript reactjs ecmascript-6 filter jsx


    【解决方案1】:

    当条件不成立时,我不想显示任何内容。

    当条件为假时,您的代码当前返回0。要不渲染,你必须返回nullfalse

    return (
        documents.filter((a) => a.types.length && a.value === toCheck).length
            ? <div>render this component</div>
            : null
    );
    

    正如 Patrick Roberts 指出的那样,您可以而且应该使用 some 而不是 filter(...).length。没有理由构建新数组,some 的优势在于它知道结果后立即停止,并且您可以在输出中使用&amp;&amp;,因为如果结果是@987654331 @,这将返回 false 并且不渲染任何内容:

    return (
        documents.some((a) => a.types.length && a.value === toCheck)
            && <div>render this component</div>
    );
    

    【讨论】:

    • 还是把.filter(...).length &amp;&amp; ...改成.some(...) &amp;&amp; ...?布尔值不会在 React 中渲染任何东西。
    • @PatrickRoberts - 我知道你可以用{something} 做到这一点,但我不知道它可以作为渲染函数的返回值。谢谢!!
    • Re:渲染函数的返回值;直接返回布尔值将导致 TypeScript 中的类型错误,因为 FunctionComponent 返回 ReactElementnull。但它确实在运行时工作。所以为了满足类型安全而不影响行为,你可以用&lt;&gt;{...}&lt;/&gt;包装表达式。
    【解决方案2】:

    0 的值呈现为文本,但某些值根本不呈现,例如 nullundefinedfalse。因此,我在某些地方看到的一种模式是,如果您以这种方式将其与&amp;&amp; 一起使用,则使用!! 将类型强制为布尔值。所以在这里,它会是:

    return (
        !!documents.filter((a) => a.types.length && a.value === toCheck).length && (
          <div>render this component</div>
        )
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2022-01-10
    • 2011-05-13
    相关资源
    最近更新 更多