Найкраща практика додавання пробілів у JSX


91

Я розумію, як (і чому ) додати пробіли в 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>

1
Вам не потрібен зайвий проміжок часу, React виправив давні проблеми з текстовими вузлами, і ваш другий приклад чудовий
Домінік

1
Я не знаю, що існує визначена "найкраща практика" - звичайно, вам не потрібно обертати все <span>тегами, але я, як правило, просто дотримуюсь загальних практик HTML, коли турбуюся про пробіли.
arthurakay

Відповіді:


104

Оскільки у &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>

10

Ви можете використати пробіл властивості css і встановити його для попереднього переносу на укладений елемент div.

div {
     white-space: pre-wrap;
}

Якщо контейнер гнучкий, тоді вам знадобиться це рішення.
Кертіс

Це єдиний не- & nbsp; рішення, яке працювало для мене!
Магнус

@Magnus Не прошу, чоловіче. Жодне з рішень цієї відповіді насправді не спрацювало для мого особливого випадку.
i_code

10

Ви можете додати прості пробіли зі знаком лапок: {" "}

Також ви можете використовувати літерали шаблонів , які дозволяють вставляти вбудовані вирази (код всередині фігурних дужок):

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

В якій версії React це працює для вас? 15.6.2, схоже, ігнорує це.
smhg

1
@smhg йо. це не залежить від версії реакції. його чудовисько екмаскрипту, машинопису. Ви можете ввести ваш шаблон у консолі Chrome, щоб перевірити, чи добре відповідає ваш темп. Проблема може бути і у ваших налаштуваннях бабеля.
Василь Гутник

1
Ви плутаєте літерали шаблонів з виразами JSX. Щоб додати пробіл через JSX, просто вставте рядок, що складається з одного символу пробілу, у виразі JSX . Найпростіший спосіб це зробити {' '}. Для цього вам не потрібні літерали шаблонів, хоча вони працюють (і так само {" "}).
Дан Даскалеску,

так, це було трохи заплутаною друкарською помилкою - виправлено. У будь-якому разі, я впевнений, 99,9% людей тут шукають шаблонні літерали :)
Василь Гутник

6

Я схильний використовувати &nbsp;

Це не красиво, але це найменш заплутаний спосіб додати пробіли, які я знайшов, і це дає мені абсолютний контроль над тим, скільки пробілів я додаю.

Якщо я хочу додати 5 пробілів:

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

Легко точно визначити, що я намагаюся робити тут, повернувшись до коду через кілька тижнів.


6
Я не уявляю на практиці, що було б використанням 5 нерозривних пробілів, що типографічно має сенс, але крім такого випадку це неправильно використовувати на практиці. Якщо ви використовуєте це для макета, замість цього слід використовувати CSS, і якщо вам потрібно додати пробіл, але не потрібно, щоб він був ламаним, існує безліч інших пробілів, які мають більший типографський сенс. Дивіться це питання, наприклад: stackoverflow.com/questions/8515365 / ...
guioconnor

1
@guioconnor спробуйте розширити свою уяву і подумати про додаток-редактор, наприклад vscode, і ви виявите, що він має повний типографський сенс: D.
Ден,

5

Вам не потрібно вставляти &nbsp;або обгортати зайвий простір <span/>. Просто використовуйте HTML-код сутності для простору -&#32;

Вставте звичайний простір як HTML-сутність

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

Примітка: сьогодні я натрапив на це, оскільки симпатичніший ламав мій код, форматуючи космічну сутність. Коли ви використовуєте {""}, він працює на рядку сам по собі і не зламається.
gorhawk

Я просто заходив, щоб додати це до власної відповіді. Я натомість підтримав ваше.
невизначено

5

Я намагався придумати хороший спосіб використання, коли розміщую текст поруч із компонентами в різних рядках, і знайшов кілька хороших варіантів:

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

або

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

Кожен із них видає чистий html без додаткової &nbsp;чи іншої сторонньої розмітки. Він створює менше текстових вузлів, ніж використання {' '}, і дозволяє використовувати HTML-сутності там, де {' hello &amp; goodbye '}цього немає.


3

Ви можете використовувати фігурні дужки, як вираз, як з подвійними, так і з одинарними лапками для пробілу, тобто,

{" "} or {' '}

Ви також можете використовувати літерали шаблонів ES6, тобто,

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

Ви також можете використовувати & nbsp, як показано нижче (всередині прольоту)

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

Ви також можете використовувати & nbsp у nevarlySetInnerHTML під час друку HTML-вмісту

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

2

використовуйте {} або {``} або&nbsp; для створення простору між елементом span та вмістом.

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

1
nbsp = Non-Breakable Space, який відрізняється від символів Unicode від звичайного простору та обмежує розбиття рядків. Іноді це бажано, просто вказуючи, що це не рівнозначно іншим варіантам.
Бені Чернявський-Паскін

1

Якщо метою є розділити два елементи, ви можете використовувати CSS, як показано нижче:

A<span style={{paddingLeft: '20px'}}>B</span>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.