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

Jan*_*art 54 javascript reactjs react-jsx

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

将两个元素包裹在一个范围内

<div className="top-element-formatting">
  <span>Hello </span>
  <span className="second-word-formatting">World!</span>
</div>
Run Code Online (Sandbox Code Playgroud)

将它们添加到一行

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
  </div>
Run Code Online (Sandbox Code Playgroud)

用JS添加空间

<div className="top-element-formatting">
    Hello {" "}
    <span className="second-word-formatting">World!</span>
</div>
Run Code Online (Sandbox Code Playgroud)

Saw*_*oes 65

因为&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>
Run Code Online (Sandbox Code Playgroud)

此方法对于自动修剪文本编辑器也是安全的.

另一种方法是使用{' '}不插入随机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>
Run Code Online (Sandbox Code Playgroud)

  • React 的官方 ESLint 规则现在会自动修复此答案中建议的“{' '}”。 (6认同)
  • 在 React 的生命周期(v17 2021)中,如果您正在决定使用哪个,{'" "} 绝对是两者中更好的一个!或者甚至更好,如果你的 linter 允许的话,只需 { } 即可。不需要空格,但如果您想要可读性,请添加它们。下面未定义的答案中也提到了。 (2认同)

i_c*_*ode 19

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

div {
     white-space: pre-wrap;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果容器是柔性的,那么您将需要此解决方案。 (3认同)

Vas*_*nyk 8

您可以使用模板文字:

`${2 * a + b}.?!=-` // Notice this sign " ` ",its not normal quotes.
Run Code Online (Sandbox Code Playgroud)

我们可以使用带有表达式的文字(花括号内的代码):

`${2 * a + b}.?!=-` // Notice this sign " ` ",its not normal quotes.
Run Code Online (Sandbox Code Playgroud)


und*_*ned 6

我一直在尝试在不同行的组件旁边放置文本时使用一个好的约定,并找到了几个不错的选择:

<p>
    Hello {
        <span>World</span>
    }!
</p>
Run Code Online (Sandbox Code Playgroud)

或者

<p>
    Hello {}
    <span>World</span>
    {} again!
</p>
Run Code Online (Sandbox Code Playgroud)

这些中的每一个都生成干净的 html,没有额外的&nbsp;或其他无关的标记。它创建的文本节点比 using 少{' '},并允许在{' hello &amp; goodbye '}不使用的情况下使用 html 实体。


小智 5

我倾向于使用 &nbsp;

它不是很漂亮,但它是添加我发现的空白的最不容易的方式,它让我可以绝对控制我添加的空白量.

如果我想添加5个空格:

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

几周之后我回到代码时,很容易确定我在这里想要做什么.

  • 我无法想象在实践中使用5个不间断的空间,除了这种情况,这在实践中使用是错误的.如果你使用它进行布局,你应该使用CSS代替,如果你需要添加一个空格但不要求它不破坏,那么还有很多其他空间可以提供更多的排版感.请参阅此问题,例如:/sf/ask/596075581/ (4认同)
  • @guioconnor 尝试扩展您的想象力并考虑一个编辑器应用程序,例如 vscode,您会发现它具有完整的排版意义:D。 (2认同)

Hem*_*ari 5

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

{" "} or {' '}
Run Code Online (Sandbox Code Playgroud)

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

`   <li></li>` or `  ${value}`
Run Code Online (Sandbox Code Playgroud)

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

<span>sample text &nbsp; </span>
Run Code Online (Sandbox Code Playgroud)

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

<div dangerouslySetInnerHTML={{__html: 'sample html text: &nbsp;'}} />
Run Code Online (Sandbox Code Playgroud)


小智 5

您不需要插入&nbsp;或包裹额外的空间<span/>。只需使用 HTML 实体代码进行空间 -&#32;

将常规空格插入为 HTML 实体

<form>
  <div>Full name:</span>&#32;
  <span>{this.props.fullName}</span>
</form>
Run Code Online (Sandbox Code Playgroud)