在 JSX 中添加空格的最佳实践

IT技术 javascript reactjs react-jsx
2021-04-15 08:02:21

我了解如何(以及为什么)在 JSX 中添加空格,但我想知道什么是最佳实践,或者是否有任何真正的区别?

将两个元素包裹在一个跨度中

<div className="top-element-formatting">
  <span>Hello </span>
  <span className="second-word-formatting">World!</span>
</div>

将它们添加到一行

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
  </div>

用JS添加空格

<div className="top-element-formatting">
    Hello {" "}
    <span className="second-word-formatting">World!</span>
</div>
6个回答

因为&nbsp会导致您有不间断的空格,所以您应该只在必要时使用它。在大多数情况下,这会产生意想不到的副作用。

旧版本的 React,我相信 v14 之前的所有版本,<span> </span>当标签中有换行符时会自动插入

虽然他们不再这样做,但这是在您自己的代码中处理此问题的安全方法。除非你有专门针对的样式span(一般来说是不好的做法),否则这是最安全的路线。

根据您的示例,您可以将它们放在一行中,因为它很短。在较长的场景中,您可能应该这样做:

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
    <span> </span>
    So much more text in this box that it really needs to be on another line.
  </div>

这种方法对于自动修剪文本编辑器也是安全的。

另一种方法是使用{' '}不插入随机 HTML 标签的方法。这在样式化、突出显示元素和从 DOM 中消除混乱时可能更有用。如果您不需要向后兼容 React v14 或更早版本,这应该是您的首选方法。

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
    {' '}
    So much more text in this box that it really needs to be on another line.
  </div>
在他的 React 生命中(v17 2021),如果您在这里决定使用哪个,{'" "} 绝对是两者中更好的!或者甚至更好,如果您的 linter 允许,只需 { }。不需要空格,但如果您想要可读性,请添加它们。在 undefined 的回答中也提到了。
2021-06-08 08:02:21
React 的官方 ESLint 规则现在会自动修复{' '}此答案中提出的建议
2021-06-20 08:02:21

您可以使用 css 属性 white-space 并将其设置为预包装到封闭的 div 元素。

div {
     white-space: pre-wrap;
}
@Magnus 不客气,伙计。这个答案的所有解决方案都不适用于我的特殊情况。
2021-05-24 08:02:21
这是唯一的非  对我有用的解决方案!
2021-05-26 08:02:21
如果容器是 flex 的,那么您将需要此解决方案。
2021-06-17 08:02:21

我倾向于使用 &nbsp;

它并不漂亮,但它是我发现的添加空格最不令人困惑的方法,它让我可以绝对控制添加多少空格。

如果我想添加 5 个空格:

Hello&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span className="second-word-formatting">World!</span>

当我几周后回到代码时,很容易准确地确定我在这里尝试做什么。

@guioconnor 尝试扩展您的想象力并考虑一个编辑器应用程序,例如 vscode,您会发现它具有完整的排版意义:D。
2021-05-25 08:02:21
我无法想象在实践中使用 5 个在排版上有意义的不间断空格会有什么用,但除了这种情况之外,这在实践中使用是错误的。如果您使用它进行布局,您应该使用 CSS 代替,如果您需要添加一个空格但不要求它是不间断的,那么还有很多其他空格更具有排版意义。参见这个问题,例如:stackoverflow.com/questions/8515365/...
2021-06-06 08:02:21

您可以添加带引号的简单空格: {" "}

您也可以使用模板文字,它允许插入、嵌入表达式(大括号内的代码):

`${2 * a + b}.?!=-` // Notice this sign " ` ",its not normal quotes.
是的,这是一个有点令人困惑的错字 - 已更正。无论如何,我敢肯定,这里 99,9% 的人都在寻找模板文字 :)
2021-05-26 08:02:21
@smhg哟。它不依赖于反应的版本。它的 ecmascript,typescript的特征。你可以在 Chrome 控制台中输入你的模板来测试你的模板是否正常。问题也可能出在您的 babel 设置中。
2021-06-04 08:02:21
您将模板文字与 JSX 表达式混淆了。要通过 JSX 添加空格,只需在JSX 表达式中放置一个由一个空格字符组成的字符串最简单的方法是{' '}. 您不需要模板文字,尽管它们可以工作(也是如此{" "})。
2021-06-07 08:02:21
在哪个版本的 React 中,这对你有用?15.6.2 似乎忽略了这一点。
2021-06-14 08:02:21

您可以使用大括号,如带有双引号和单引号的表达式,即,

{" "} or {' '}

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

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

您还可以使用   如下所示(跨度内)

<span>sample text &nbsp; </span>

打印 html 内容时,您还可以在危险的SetInnerHTML 中使用  

<div dangerouslySetInnerHTML={{__html: 'sample html text: &nbsp;'}} />