【问题标题】:&nbsp jsx not working&nbsp jsx 不工作
【发布时间】:2016-10-20 22:03:11
【问题描述】:

我在 jsx 中使用 &nbsp 标记,它没有渲染空间。以下是我的代码的一个小sn-p。请帮助。

var Reporting=React.createClass({

  render: function(){
    return(
      <div style={divPositionReporting}>
          <p>Pricing Reports</p>
          <hr></hr>
          Select Scenario:&nbsp;&nbsp;
          <select>
            <option></option>
          </select>
          <button type="button">Get Pricing Report</button>
          <br/>
          Select Takeout Scenario:&nbsp;
          <select>
            <option></option>
          </select>
          <button type="button">Get Pricing Report</button>
          <br/>
      </div>
    );
  },

});

【问题讨论】:

标签: html reactjs jsx


【解决方案1】:

你可以简单地用Fragment包装它:

&lt;Fragment&gt;&amp;nbsp;&lt;/Fragment&gt;

【讨论】:

  • 你甚至可以通过使用来简化它:&lt;&gt;&amp;nbsp;&lt;/&gt;
【解决方案2】:

尝试使用utf-8 nbsp,看似简单的空间,但无需额外代码也能正常工作。

也许,您应该为此创建变量。

对于复制符号: https://unicode-table.com/en/00A0/

要自动生成文本,请使用一些排版。

【讨论】:

    【解决方案3】:

    见:JSX In Depth

    尝试: Select Scenario:{'\u00A0'}

    或者: &lt;div dangerouslySetInnerHTML={{__html: 'Select Scenario: &amp;nbsp;'}} /&gt;

    或者: &lt;div&gt;&amp;nbsp;&lt;/div&gt;

    jsfiddle

    更新

    在看到一些 cmets 并尝试了一下之后。我注意到在 JSX 中使用 html 实体可以正常工作(与上面的 jsx-gotchas 参考 [可能已经过时] 中所述不同)。

    所以使用类似:R&amp;amp;D,将输出:'R&D'。 &amp;nbsp; 有一个奇怪的行为,导致它的渲染方式不同,因此让我认为它不起作用:

    <div>This works simply:-&nbsp;-</div>
    <div>This works simply:- {'\u00A0'}-</div>
    

    生产:

    This works simply:- -
    This works simply:-  -
    

    【讨论】:

    • 所以答案是使用与html实体对应的unicode值并在javascript字符串中使用它。感谢您的帮助。
    • @IndraneelBende &amp;nbsp; 应该可以正常工作。 style属性的值有问题。
    • &lt;div&gt;Doesn't work: -&amp;nbsp;-&lt;/div&gt; 对我来说很好用。 编辑:嗯,它似乎不是一个不间断的空间。
    • 值得注意的是,u00A0 由于网络钓鱼计划而被浏览器列入黑名单。 kb.mozillazine.org/Network.IDN.blacklist_chars
    • @AndrewHill 这个文档是关于域名的,和 JSX/HTML 有什么关系?
    【解决方案4】:

    {'\u00A0'} 有效但难以阅读,所以我将其包裹在 function component 中:

    组件/nbsp.js:

    export default () => '\u00A0';
    

    用法:

    Hello<Nbsp />world
    
    

    【讨论】:

      【解决方案5】:

      如果这对您不起作用{' '},请使用{'\u00A0'}

      {' '} 将呈现一个空格,但在某些情况下,当您希望在没有其他文本的 HTML 元素内有一个空格的情况下也呈现行高时,即:&lt;span style={{ lineHeight: '1em' }}&gt;{' '}&lt;/span&gt;,即如果您需要在 span 或 HTML 元素中使用 {'\u00A0'}

      【讨论】:

        【解决方案6】:

        您也可以使用 ES6 模板文字,即,

        `   <li></li>` or `  ${value}`
        

        【讨论】:

        • 这个答案与 html 实体有什么关系?
        【解决方案7】:

        将您的jsx 代码写在{ } 中,如下所示。

        <h1>Code {' '}</h1>
        

        您可以在此处放置空格或任何特殊字符。

        例如你的情况

        Select Takeout Scenario:&nbsp;
        

        应该是这样的

        Select Takeout Scenario:{' '}
        

        它会起作用的。

        建议您不要使用&amp;nbsp 来添加额外的空间,您可以使用css 来实现。

        【讨论】:

        • 这只是添加空格,但不适用于其他html实体
        • 这不是一个不间断空间。
        • @TimoSolo 我不鼓励您使用 &nbsp 或上述技术。如果我的不起作用,您可以尝试第一个答案。谢谢。
        • "使用 css 实现相同" - 您可能正在使用不间断空格,因此您的文本不会下降到下一行和包含文本的元素的边界之外。如果你想使用 CSS 属性来代替,那么一种方法是text-overflow: "clip";overflow: "hidden";。有几种可用的变体。
        猜你喜欢
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多