Mejores prácticas al agregar espacios en blanco en JSX


91

Entiendo cómo (y por qué ) agregar un espacio en blanco en JSX, pero me pregunto cuál es la mejor práctica o si alguna marca una diferencia real.

Envuelva ambos elementos en un tramo

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

Agréguelos en una línea

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

Agrega espacio con JS

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

1
No necesita el lapso adicional, React ha solucionado problemas de larga data con los nodos de texto y su segundo ejemplo está bien
Dominic

1
No sé si hay una "mejor práctica" definida; ciertamente, no es necesario que envuelva todo en <span>etiquetas, pero generalmente sigo las prácticas genéricas de HTML cuando me preocupo por los espacios en blanco.
Arturakay

Respuestas:


104

Debido a que &nbsphace que tengas espacios sin rupturas, solo debes usarlo donde sea necesario. En la mayoría de los casos, esto tendrá efectos secundarios no deseados.

Las versiones anteriores de React, creo que todas las anteriores a la v14, se insertarían automáticamente <span> </span> cuando tuvieras una nueva línea dentro de una etiqueta.

Si bien ya no hacen esto, es una forma segura de manejar esto en su propio código. A menos que tenga un estilo que se dirija específicamente span(mala práctica en general), esta es la ruta más segura.

Según su ejemplo, puede ponerlos juntos en una sola línea, ya que es bastante corto. En escenarios de líneas más largas, probablemente debería hacerlo así:

  <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>

Este método también es seguro contra los editores de texto con recorte automático.

El otro método es el {' '}que no inserta etiquetas HTML aleatorias. Esto podría ser más útil al diseñar, resaltar elementos y eliminar el desorden del DOM. Si no necesita compatibilidad con versiones anteriores de React v14 o anterior, este debería ser su método preferido.

  <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>

10

Puede usar el espacio en blanco de la propiedad css y configurarlo para que se ajuste previamente al elemento div adjunto.

div {
     white-space: pre-wrap;
}

Si el contenedor es flexible, necesitará esta solución.
Curtis

Esta es la única opción que no es & nbsp; solución que funcionó para mí!
Magnus

@Magnus De nada, amigo. Ninguna de las soluciones a esta respuesta realmente funcionó para mi caso especial.
i_code

10

Puede agregar un espacio en blanco simple con el signo de comillas: {" "}

También puede usar literales de plantilla , que permiten insertar, incrustar expresiones (código dentro de llaves):

`${2 * a + b}.?!=-` // Notice this sign " ` ",its not normal quotes.

¿En qué versión de React funciona esto para ti? 15.6.2 parece ignorar esto.
smhg

1
@smhg yo. no depende de la versión de react. su característica de ecmascript, mecanografiado. Puede escribir su plantilla en la consola de Chrome para probar si su temlate está bien. El problema también puede estar en la configuración de babel.
Vasyl Gutnyk

1
Estás confundiendo literales de plantilla con expresiones JSX. Para agregar un espacio a través de JSX, simplemente coloque una cadena que consta de un carácter de espacio en una expresión JSX . La forma más sencilla de hacerlo es {' '}. No necesita literales de plantilla para eso, aunque funcionan (y también lo hace {" "}).
Dan Dascalescu

sí, fue un error tipográfico un poco confuso - corregido. De todos modos, estoy seguro, el 99,9% de las personas aquí están buscando literales de plantilla :)
Vasyl Gutnyk

6

Yo tiendo a usar &nbsp;

No es bonito, pero es la forma menos confusa de agregar espacios en blanco que he encontrado y me da un control absoluto sobre la cantidad de espacios en blanco que agrego.

Si quiero agregar 5 espacios:

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

Es fácil identificar exactamente lo que estoy tratando de hacer aquí cuando vuelvo al código semanas después.


6
No puedo imaginar en la práctica cuál sería el uso de 5 espacios sin ruptura que tenga sentido tipográfico, pero aparte de tal caso, es incorrecto usarlo en la práctica. Si está usando esto para el diseño, debe usar CSS en su lugar y si necesita agregar un espacio pero no requiere que sea ininterrumpido, hay muchos otros espacios que tienen más sentido tipográfico. Vea esta pregunta, por ejemplo: stackoverflow.com/questions/8515365/…
guioconnor

1
@guioconnor intente extender su imaginación y piense en una aplicación de edición, por ejemplo, vscode y encontrará que tiene un sentido tipográfico completo: D.
Dan

5

No es necesario que inserte &nbsp;o envuelva su espacio extra con <span/>. Simplemente use el código de entidad HTML para el espacio -&#32;

Insertar espacio regular como entidad HTML

<form>
  <div>Full name:</span>&#32;
  <span>{this.props.fullName}</span>
</form>

Nota al margen: hoy me encontré con esto porque más bonito estaba rompiendo mi código al formatear la entidad espacial. Cuando usa {""}, funciona en una línea por sí solo y no se rompe.
gorhawk

Solo venía para agregar esto a mi propia respuesta. En su lugar, he votado a favor del tuyo.
indefinido

5

He estado tratando de pensar en una buena convención para usar al colocar texto junto a componentes en diferentes líneas, y encontré un par de buenas opciones:

<p>
    Hello {
        <span>World</span>
    }!
</p>

o

<p>
    Hello {}
    <span>World</span>
    {} again!
</p>

Cada uno de estos produce un HTML limpio sin &nbsp;marcas adicionales o extrañas. Crea menos nodos de texto que el uso {' '}y permite el uso de entidades html donde {' hello &amp; goodbye '}no lo hace.


3

Puede usar llaves como expresión con comillas dobles y comillas simples para el espacio, es decir,

{" "} or {' '}

También puede utilizar literales de plantilla ES6, es decir,

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

También puede usar & nbsp como se muestra a continuación (dentro del intervalo)

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

También puede utilizar & nbsp en dangerouslySetInnerHTML al imprimir contenido html

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

2

use {} o {``} o&nbsp; para crear espacio entre el elemento span y el contenido.

<b> {notif.name} </b> <span id="value"> &nbsp;{ notif.count }{``} </span>

1
nbsp = espacio no divisible, que es un carácter unicode diferente del espacio normal y restringe el salto de línea. A veces eso es deseable, solo señalar que no es equivalente a las otras opciones.
Beni Cherniavsky-Paskin

1

Si el objetivo es separar dos elementos, puede usar CSS como se muestra a continuación:

A<span style={{paddingLeft: '20px'}}>B</span>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.