【问题标题】:ReactJS - render conditionally whitespaceReactJS - 有条件地渲染空白
【发布时间】:2018-03-15 11:03:14
【问题描述】:

我正在尝试构建一个按钮组件,它能够在元素的子元素之前和之后设置图标。

因此,道具是这样的:

export interface IButtonProps {
    children?: React.ReactNode;
    leftIcon?: FontAwesomeIcon;
    rightIcon?: FontAwesomeIcon;
}

FontAwesomeIcon 是一个包含可用图标的枚举。

在按钮的render-function 中,我会检查是否有图标集。如果是这样,应该有图标和孩子和图标之间的空白。

render(): JSX.Element {
    let { children, leftIcon, rightIcon } = this.props;

    return (
        <button>
            {leftIcon && <FontAwesome icon={leftIcon} />}
            {leftIcon && " "}
            {children}
            {rightIcon && " "}
            {rightIcon && <FontAwesome icon={rightIcon} />}
        </button>
    );
}

虽然这个解决方案有效,但我想知道是否有比检查两次设置图标更简单的方法。我也希望能够使用&amp;nbsp; 而不是。 有什么办法可以逃避空白,这样我就可以写{leftIcon &amp;&amp; &lt;FontAwesome icon={leftIcon} /&gt;&amp;nbsp;}之类的东西了?

我尝试了{leftIcon &amp;&amp; &lt;FontAwesome icon={leftIcon} /&gt;{"&amp;nsbp;"}}{leftIcon &amp;&amp; &lt;FontAwesome icon={leftIcon} /&gt;{&amp;nsbp;}} 导致

TS1005:应为“}”。

【问题讨论】:

  • 你为什么不为此添加样式
  • @JigarShah 你介意添加一个关于如何准确使用样式的示例吗?
  • 当然,我会试试的。你能做点心演示吗

标签: javascript reactjs typescript html-entities


【解决方案1】:

这篇文章建议&amp;nbsp; 应该适用于有意的空白http://andrewhfarmer.com/how-whitespace-works-in-jsx/

看到您应该能够将&amp;nbsp; 与其他 HTML 内联插入,我原以为您不需要将其包裹在括号或字符串中。想象一下,就像写 &lt;br /&gt; 一样,您应该可以将它粘贴到 &lt;FontAwesome /&gt; 组件的末尾。

render(): JSX.Element {
  let { children, leftIcon, rightIcon } = this.props;

  return (
    <button>
        {leftIcon && <FontAwesome icon={leftIcon} />&nbsp;}
        {children}
        {rightIcon && &nbsp;<FontAwesome icon={rightIcon} />}
    </button>
  );
}

免责声明,这是未经测试的

作为替代方案,这个 github 问题 https://github.com/facebook/react/issues/1643 建议您可以添加 {' '} 用于有意的空白,所以我认为这也可以:

render(): JSX.Element {
  let { children, leftIcon, rightIcon } = this.props;

  return (
    <button>
        {leftIcon && <FontAwesome icon={leftIcon} />{' '}}
        {children}
        {rightIcon && {' '}<FontAwesome icon={rightIcon} />}
    </button>
  );
}

免责声明,也未经测试

【讨论】:

  • 第一个给了我两个错误。 TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enumTS2304: Cannot find name 'nbsp'. 第二个 TS1005: '}' expected.。那么这可能与TypeScript 更相关?
  • 有趣,可能没有{},但有""(我只是猜想我恐怕无法测试atm)
猜你喜欢
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2018-06-30
  • 2014-11-26
  • 2012-11-20
  • 2019-10-13
  • 2019-11-30
  • 1970-01-01
相关资源
最近更新 更多