JSX'e boşluk eklerken en iyi uygulama


91

JSX'e nasıl (ve neden ) boşluk ekleyeceğimi anlıyorum, ancak en iyi uygulamanın ne olduğunu veya herhangi birinin gerçek bir fark yaratıp yaratmadığını merak ediyorum.

Her iki öğeyi bir aralıkta sarın

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

Onları tek satıra ekleyin

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

JS ile alan ekleyin

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

1
Ekstra aralığa ihtiyacınız yok, React metin düğümleriyle ilgili uzun süredir devam eden sorunları çözdü ve ikinci örneğiniz iyi
Dominic

1
Tanımlanmış bir "en iyi uygulama" olduğunu bilmiyorum - kesinlikle her şeyi <span>etiketlere sarmanıza gerek yoktur , ancak genellikle beyaz boşluk konusunda endişelenirken genel HTML uygulamalarını izlerim .
arthurakay

Yanıtlar:


104

&nbspBölünemez boşluklara sahip olmanıza neden olduğundan , sadece gerekli yerlerde kullanmalısınız. Çoğu durumda, bunun istenmeyen yan etkileri olacaktır.

React'in eski sürümleri, inanıyorum ki v14'ten öncekiler <span> </span>, bir etiketin içinde yeni bir satırınız olduğunda otomatik olarak ekleyecekti .

Artık bunu yapmasalar da, bunu kendi kodunuzda halletmenin güvenli bir yolu. Özel olarak hedefleyen stiliniz yoksa span(genel olarak kötü uygulama), o zaman bu en güvenli yoldur.

Örneğinize göre, oldukça kısa olduğu için onları tek bir satıra koyabilirsiniz. Daha uzun senaryolarda, muhtemelen bunu şu şekilde yapmalısınız:

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

Bu yöntem, otomatik kırpılan metin düzenleyiciler için de güvenlidir.

Diğer yöntem, {' '}rastgele HTML etiketleri eklemeyen kullanmaktır . Bu, öğelerin stilini belirlerken, vurgularken ve DOM'daki karmaşayı kaldırırken daha yararlı olabilir. React v14 veya önceki sürümlerle geriye dönük uyumluluğa ihtiyacınız yoksa tercih ettiğiniz yöntem bu olmalıdır.

  <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

Beyaz boşluk css özelliğini kullanabilir ve onu çevreleyen div öğesine önceden saracak şekilde ayarlayabilirsiniz.

div {
     white-space: pre-wrap;
}

Kap esnekse, bu çözüme ihtiyacınız olacak.
Curtis

Bu, & nbsp; benim için çalışan çözüm!
Magnus

@Magnus rica ederim adamım. Bu cevaba yönelik çözümlerin hiçbiri benim özel durumum için işe yaramadı.
i_code

10

Tırnak işaretiyle basit beyaz boşluk ekleyebilirsiniz: {" "}

Ayrıca , ifadelerin eklenmesine, yerleştirilmesine izin veren şablon değişmezlerini de kullanabilirsiniz (küme parantezleri içindeki kod):

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

Bu sizin için hangi React sürümünde çalışıyor? 15.6.2 bunu görmezden geliyor gibi görünüyor.
smhg

1
@smhg yo. react versiyonuna bağlı değildir. ecmascript özelliği, typcript. Temlate'inizin uygun olup olmadığını test etmek için şablonunuzu Chrome konsoluna yazabilirsiniz. Sorun babel ortamlarınızda da olabilir.
Vasyl Gutnyk

1
Şablon değişmezlerini JSX ifadeleriyle karıştırıyorsunuz. JSX aracılığıyla boşluk eklemek için, bir JSX ifadesine bir boşluk karakterinden oluşan bir dize koymanız yeterlidir . Bunu yapmanın en basit yolu {' '}. Bunun için şablon değişmez değerlerine ihtiyacınız yok, ancak işe yarıyorlar (ve öyle de {" "}).
Dan Dascalescu

Siz, biraz kafa karıştırıcı yazım hatası düzeltildi. Her neyse, eminim ki buradaki% 99,9 kişi şablon değişmezleri arıyor :)
Vasyl Gutnyk

6

Kullanmaya eğilimliyim &nbsp;

Güzel değil ama bulduğum boşlukları eklemenin en az kafa karıştırıcı yolu ve ne kadar boşluk eklediğim konusunda bana mutlak kontrol sağlıyor.

5 boşluk eklemek istersem:

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

Haftalar sonra koda geri döndüğümde, burada ne yapmaya çalıştığımı tam olarak belirlemek kolay.


6
Tipografik olarak anlamlı olan 5 bölünmeyen boşluğun kullanımının pratikte ne olacağını hayal edemiyorum, ancak böyle bir durum dışında, pratikte kullanmak yanlış. Bunu mizanpaj için kullanıyorsanız, bunun yerine CSS kullanmalısınız ve bir boşluk eklemeniz gerekiyorsa ancak kesintisiz olmasını gerektirmiyorsa, daha tipografik anlam ifade eden birçok başka alan vardır. Bu soruya bakın, örneğin: stackoverflow.com/questions/8515365/…
guioconnor

1
@guioconnor hayal gücünüzü genişletmeye çalışın ve bir editör uygulaması düşünün, örneğin vscode ve bunun tamamen tipografik bir anlam ifade ettiğini göreceksiniz: D.
Dan

5

&nbsp;Fazladan alanınızı eklemenize veya sarmanıza gerek yoktur <span/>. Alan için HTML varlık kodunu kullanın -&#32;

HTML varlığı olarak normal boşluk ekle

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

Yan not: Bugün , uzay varlığını biçimlendirerek kodumu daha güzel kırdığım için bununla karşılaştım . {""} Kullandığınızda, kendi başına bir hatta çalışır ve kopmaz.
gorhawk

Bunu kendi cevabıma eklemek için geliyordum. Onun yerine seninkine oy verdim.
tanımlanmamış

5

Farklı satırlardaki bileşenlerin yanına metin yerleştirirken kullanmak için iyi bir kural bulmaya çalışıyordum ve birkaç iyi seçenek buldum:

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

veya

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

Bunların her biri, ek &nbsp;veya diğer harici işaretler olmadan temiz html üretir . Kullanmaktan daha az metin düğümü oluşturur {' '}ve kullanılmayan yerlerde html varlıklarının kullanılmasına izin verir {' hello &amp; goodbye '}.


3

Boşluk için hem çift tırnak hem de tek tırnak içeren ifade gibi küme parantezlerini kullanabilirsiniz, yani,

{" "} or {' '}

ES6 şablon değişmezlerini de kullanabilirsiniz, yani,

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

Ayrıca & nbsp'yi aşağıdaki gibi de kullanabilirsiniz (aralık içinde)

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

Html içeriğini yazdırırken & nbsp'yi de dangerouslySetInnerHTML'de kullanabilirsiniz

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

2

span öğesi ve içerik arasında boşluk oluşturmak için {} veya {`}&nbsp; kullanın .

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

1
nbsp = Normal boşluktan farklı unicode karakteri olan ve satır kesmeyi kısıtlayan Kırılmaz Boşluk. Bazen bu arzu edilir, sadece diğer seçeneklerle eşdeğer olmadığını belirtmek isteriz.
Beni Cherniavsky-Paskin

1

Amaç iki öğeyi ayırmaksa, aşağıdaki gibi CSS kullanabilirsiniz:

A<span style={{paddingLeft: '20px'}}>B</span>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.