JSX में व्हॉट्सएप जोड़ते समय सबसे अच्छा अभ्यास


96

मैं समझता हूं कि 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>

जेएस के साथ अंतरिक्ष जोड़ें

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

1
आपको अतिरिक्त अवधि की आवश्यकता नहीं है, रिएक्ट ने टेक्स्ट नोड्स के साथ लंबे समय तक चलने वाले मुद्दों को निर्धारित किया है और आपका दूसरा उदाहरण ठीक है
डोमिनिक

1
मुझे नहीं पता कि कोई परिभाषित "सर्वोत्तम अभ्यास" है - निश्चित रूप से आपको <span>टैग में सब कुछ लपेटने की आवश्यकता नहीं है , लेकिन मैं आमतौर पर सफेद स्थान के बारे में चिंता करते समय सामान्य एचटीएमएल प्रथाओं का पालन करता हूं।
14

जवाबों:


110

क्योंकि &nbspआपके पास गैर-ब्रेकिंग स्थान हैं, इसलिए आपको केवल इसका उपयोग करना चाहिए जहां आवश्यक हो। ज्यादातर मामलों में, इसके अनपेक्षित दुष्प्रभाव होंगे।

प्रतिक्रिया के पुराने संस्करण, मेरा मानना ​​है कि 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>

15

आप css प्रॉपर्टी को व्हाइट-स्पेस का उपयोग कर सकते हैं और इसे एनक्लोज़िंग डिव तत्व से प्री-रैप कर सकते हैं।

div {
     white-space: pre-wrap;
}

यदि कंटेनर फ्लेक्स है, तो आपको इस समाधान की आवश्यकता होगी।
कर्टिस

यह एकमात्र गैर- & nbsp है; समाधान है कि मेरे लिए काम किया!
मैग्नस

@ मैग्नस आपका स्वागत है, मेरे आदमी। इस उत्तर के किसी भी समाधान ने वास्तव में मेरे विशेष मामले के लिए काम नहीं किया।
i_code

10

आप उद्धरण चिन्ह के साथ सरल सफेद स्थान जोड़ सकते हैं: {" "}

इसके अलावा, आप टेम्पलेट शाब्दिक का उपयोग कर सकते हैं , जो सम्मिलित करने की अनुमति देते हैं, एंबेड अभिव्यक्ति (घुंघराले ब्रेस के अंदर कोड):

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

रिएक्ट के किस संस्करण में यह आपके लिए काम करता है? 15.6.2 इसे नजरअंदाज करता है।
smhg

1
@ ह्सिग यो। यह प्रतिक्रिया के संस्करण पर निर्भर नहीं करता है। पारिस्थितिकीय, टाइपस्क्रिप्ट के अपने feautere। यदि आपका टेम्प्लेट ठीक है, तो आप परीक्षण करने के लिए Chrome कंसोल में अपना टेम्पलेट टाइप कर सकते हैं। समस्या आपके कोलाहल सेटिंग्स में भी हो सकती है।
वासिल गुटनीक

1
आप JSX अभिव्यक्ति के साथ टेम्पलेट शाब्दिक भ्रमित कर रहे हैं। JSX के माध्यम से एक स्थान जोड़ने के लिए, बस एक JSX अभिव्यक्ति में एक स्थान वर्ण से मिलकर एक तार लगाएं । ऐसा करने का सबसे सरल तरीका है {' '}। आपको उसके लिए टेम्पलेट शाब्दिकों की आवश्यकता नहीं है, हालांकि वे काम करते हैं (और ऐसा ही {" "})।
डैन डेस्केल्सस्कु

हाँ, यह थोड़ा भ्रमित करने वाला टाइपो था - सही। वैसे भी, मुझे यकीन है, यहाँ 99,9% लोग टेम्पलेट शाब्दिक की तलाश में हैं :)
Vasyl Gutnyk

6

मैं उपयोग करते हैं &nbsp;

यह सुंदर नहीं है, लेकिन मैंने जो व्हाट्सएप जोड़ा है, उसे जोड़ने के लिए यह कम से कम भ्रमित करने वाला तरीका है और इससे मुझे पता चलता है कि मैं कितने व्हाट्सएप पर पूर्ण नियंत्रण रखता हूं।

अगर मैं 5 स्थान जोड़ना चाहता हूं:

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

जब मैं कोड हफ़्ते में वापस आता हूँ, तो यह पहचानना आसान होता है कि मैं यहाँ क्या करने की कोशिश कर रहा हूँ।


6
मैं अभ्यास में कल्पना नहीं कर सकता कि 5 गैर-ब्रेकिंग स्पेस का उपयोग क्या होगा जो टाइपोग्राफिक रूप से समझ में आता है, लेकिन इस तरह के मामले से अलग यह व्यवहार में उपयोग करने के लिए गलत है। यदि आप इसे लेआउट के लिए उपयोग कर रहे हैं, तो आपको इसके बजाय सीएसएस का उपयोग करना चाहिए और यदि आपको एक स्थान जोड़ने की आवश्यकता है, लेकिन इसे गैर-ब्रेकिंग की आवश्यकता नहीं है तो बहुत सारे अन्य स्थान हैं जो अधिक टाइपोग्राफिक अर्थ बनाते हैं। इस प्रश्न को देखें, उदाहरण के लिए: 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 का उत्पादन करता है । यह उपयोग करने की तुलना में कम पाठ नोड्स बनाता है {' '}, और HTML संस्थाओं के उपयोग की अनुमति देता है जहां {' hello &amp; goodbye '}नहीं होता है।


4

आपको &nbsp;अपने अतिरिक्त स्थान को सम्मिलित या लपेटने की आवश्यकता नहीं है <span/>। अंतरिक्ष के लिए बस HTML इकाई कोड का उपयोग करें -&#32;

HTML- निकाय के रूप में नियमित स्थान डालें

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

साइड नोट: आज मैं इस के रूप में सामने आया क्योंकि प्रीटियर अंतरिक्ष इकाई को प्रारूपित करके मेरे कोड को तोड़ रहा था। जब आप {""} का उपयोग करते हैं, तो यह अपने आप एक लाइन पर काम करता है, और टूटेगा नहीं।
गोरखा

मैं बस इसे अपने जवाब में जोड़ने के लिए आ रहा था। मैंने तुम्हारे बदले तुम्हारा उत्थान किया है।
अपरिभाषित

4

आप दोनों डबल कोट्स और स्पेस के लिए सिंगल कोट्स के साथ एक्सप्रेशन जैसे कर्ली ब्रेसेस का उपयोग कर सकते हैं,

{" "} or {' '}

आप ES6 टेम्पलेट शाब्दिक का भी उपयोग कर सकते हैं,

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

आप नीचे & स्पान की तरह & nbsp का उपयोग भी कर सकते हैं)

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

HTML सामग्री को प्रिंट करते समय आप खतरनाक तरीके से & nbsp; का उपयोग भी कर सकते हैं

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

2

उपयोग {} या { ``} या&nbsp; स्पान तत्व और सामग्री के बीच जगह बनाने के लिए।

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

1
nbsp = नॉन-ब्रेकेबल स्पेस, जो रेगुलर स्पेस से अलग यूनिकोड कैरेक्टर है और लाइन ब्रेकिंग को प्रतिबंधित करता है। कभी-कभी यह वांछनीय है, केवल यह इंगित करता है कि यह अन्य विकल्पों के बराबर नहीं है।
बेनी चेर्नियाव्स्की-पास्किन

0

यदि लक्ष्य दो तत्वों को अलग करना है, तो आप नीचे दिए गए सीएसएस का उपयोग कर सकते हैं:

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

यह केवल दृश्य प्रदान करता है, शब्दार्थ पृथक्करण नहीं। यदि आप परिणाम की प्रतिलिपि बनाते हैं, तो आप अभी भी प्राप्त कर रहे हैं AB, नहीं A B
atO 'डेल्टाज़ेरो'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.