JSXで空白を追加する際のベストプラクティス


95

JSXに空白を追加する方法(および理由)は理解していますが、ベストプラクティスは何か、または実際に違いがあるかどうか疑問に思っています。

両方の要素をスパンでラップします

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

それらを1行で追加します

  <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はテキストノードに関する長年の問題を修正しました。2番目の例は問題ありません
Dominic

1
定義された「ベストプラクティス」があるかどうかはわかりません。確かに<span>、すべてをタグでラップする必要はありませんが、空白を心配するときは、通常、一般的なHTMLプラクティスに従います。
arthurakay 2016年

回答:


109

ので&nbsp、あなたが非改行スペースを持つことが原因必要な場合、あなたはそれを使用する必要があります。ほとんどの場合、これには意図しない副作用があります。

古いバージョンのReactは、v14より前のバージョンはすべて<span> </span>、タグ内に改行があると自動的に挿入されると思います。

彼らはもはやこれをしていませんが、それはあなた自身のコードでこれを処理するための安全な方法です。特に対象とするスタイリングspan(一般的には悪い習慣)がない限り、これが最も安全なルートです。

あなたの例では、かなり短いので、それらを1行にまとめることができます。より長い行のシナリオでは、これはおそらくそれを行うべき方法です:

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

この方法は、自動トリミングテキストエディタに対しても安全です。

もう1つの方法は、{' '}ランダムな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>

13

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よ。それはreactのバージョンに依存しません。ecmascript、typescriptのその機能。Chromeコンソールにテンプレートを入力して、テンプレートに問題がないかどうかをテストできます。問題は、babelの設定にもある可能性があります。
Vasyl Gutnyk 2018年

1
テンプレートリテラルとJSX式を混同しています。JSXを介してスペースを追加するには、JSX式に1つのスペース文字で構成される文字列を入力するだけです。それを行う最も簡単な方法は{' '}です。テンプレートリテラルは機能しますが(そうなります{" "})、そのためにテンプレートリテラルは必要ありません。
ダンダスカレスク

ええ、それは少し紛らわしいタイプミスでした-訂正されました。とにかく、私は確信しています、ここの99,9%の人々はテンプレートリテラルを探しています:)
VasylGutnyk19年

6

私は使う傾向があります &nbsp;

それはきれいではありませんが、私が見つけた空白を追加するための最も混乱の少ない方法であり、追加する空白の量を完全に制御できます。

5つのスペースを追加したい場合:

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

数週間後にコードに戻ったときに、ここで何をしようとしているのかを正確に特定するのは簡単です。


6
活字的に意味のある5つの改行なしスペースの使用が実際に何であるかを想像することはできませんが、そのような場合を除いて、これは実際に使用するのは間違っています。これをレイアウトに使用している場合は、代わりにCSSを使用する必要があります。スペースを追加する必要があるが、改行しないようにする必要がない場合は、活版印刷に意味のある他のスペースがたくさんあります。例えば、この質問を参照してください:stackoverflow.com/questions/8515365/...
guioconnor

2
@guioconnorは、想像力を広げて、vscodeなどのエディターアプリケーションについて考えてみてください。完全な誤植が意味をなすことがわかります:D。
ダン

6

さまざまな行のコンポーネントの横にテキストを配置するときに使用する適切な規則を考えようとしてきましたが、いくつかの適切なオプションが見つかりました。

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

または

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

これらはそれぞれ、追加&nbsp;またはその他の無関係なマークアップなしでクリーンなhtmlを生成します。を使用するよりも少ないテキストノードを作成し{' '}{' hello &amp; goodbye '}そうでない場合はhtmlエンティティを使用できます。


4

&nbsp;余分なスペースを挿入したり、でラップしたりする必要はありません<span/>。スペースにはHTMLエンティティコードを使用するだけです-&#32;

HTMLエンティティとして通常のスペースを挿入します

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

サイドノート:として、今日私はこの出くわしきれいにスペースエンティティをフォーマットすることにより、自分のコードを壊しました。{""}を使用すると、それ自体が1行で機能し、壊れることはありません。
gorhawk

私はちょうどこれを自分の答えに追加するためにやって来ました。代わりにあなたの賛成票を投じました。
未定義の

4

スペースに二重引用符と一重引用符の両方を使用した式のような中括弧を使用できます。

{" "} or {' '}

ES6テンプレートリテラルを使用することもできます。

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

以下のように&nbspを使用することもできます(スパン内)

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

HTMLコンテンツを印刷するときに、dangerlySetInnerHTMLで&nbspを使用することもできます

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

2

使用{}または{ `}または&nbsp;span要素とコンテンツの間のスペースを作成します。

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

1
nbsp =ノーブレークスペース。通常のスペースとは異なるUnicode文字であり、改行を制限します。他のオプションと同等ではないことを指摘するだけで、それが望ましい場合もあります。
BeniCherniavsky-Paskin20年

0

目標が2つの要素を分離することである場合は、次のようにCSSを使用できます。

A<span style={{paddingLeft: '20px'}}>B</span>

これは視覚的な分離のみを提供し、意味的な分離は提供しません。結果をコピーしても、ABではなく、が表示されますA B
ΔO 'deltazero'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.