इस बारे में क्या। आइए एक सरल मदद If
घटक को परिभाषित करें ।
var If = React.createClass({
render: function() {
if (this.props.test) {
return this.props.children;
}
else {
return false;
}
}
});
और इसे इस तरह से उपयोग करें:
render: function () {
return (
<div id="page">
<If test={this.state.banner}>
<div id="banner">{this.state.banner}</div>
</If>
<div id="other-content">
blah blah blah...
</div>
</div>
);
}
अद्यतन: जैसा कि मेरा जवाब लोकप्रिय हो रहा है, मैं आपको इस समाधान से संबंधित सबसे बड़े खतरे के बारे में चेतावनी देने के लिए बाध्य महसूस करता हूं। जैसा कि एक अन्य जवाब में कहा गया है, <If />
घटक के अंदर कोड को हमेशा निष्पादित किया जाता है, भले ही यह शर्त सही हो या गलत। इसलिए निम्नलिखित उदाहरण मामले में असफल हो जायेगी banner
है null
(दूसरी पंक्ति पर संपत्ति का उपयोग पर ध्यान दें):
<If test={this.state.banner}>
<div id="banner">{this.state.banner.url}</div>
</If>
इसका उपयोग करते समय आपको सावधान रहना होगा। मेरा सुझाव है कि वैकल्पिक (सुरक्षित) दृष्टिकोणों के लिए अन्य उत्तर पढ़ें।
अद्यतन 2: पीछे मुड़कर देखें, तो यह दृष्टिकोण न केवल खतरनाक है, बल्कि सख्त बोझिल भी है। यह एक विशिष्ट उदाहरण है जब एक डेवलपर (मुझे) पैटर्न को स्थानांतरित करने की कोशिश करता है और वह एक क्षेत्र से दूसरे क्षेत्र में जानता है, लेकिन यह वास्तव में (इस मामले में अन्य टेम्पलेट भाषाओं में) काम नहीं करता है।
यदि आपको एक सशर्त तत्व की आवश्यकता है, तो इसे इस तरह से करें:
render: function () {
return (
<div id="page">
{this.state.banner &&
<div id="banner">{this.state.banner}</div>}
<div id="other-content">
blah blah blah...
</div>
</div>
);
}
यदि आपको दूसरी शाखा की भी आवश्यकता है, तो बस एक टर्नरी ऑपरेटर का उपयोग करें:
{this.state.banner ?
<div id="banner">{this.state.banner}</div> :
<div>There is no banner!</div>
}
यह रास्ता छोटा, अधिक सुरुचिपूर्ण और सुरक्षित है। मैं इसका हर समय उपयोग करता हूं। इसका एकमात्र नुकसान यह है कि आप else if
आसानी से ब्रांचिंग नहीं कर सकते हैं लेकिन यह आमतौर पर उतना सामान्य नहीं है।
वैसे भी, यह संभव है कि जावास्क्रिप्ट काम में तार्किक ऑपरेटरों के लिए धन्यवाद । तार्किक ऑपरेटर भी इस तरह से कम चाल की अनुमति देते हैं:
<h3>{this.state.banner.title || 'Default banner title'}</h3>
else
शाखा नहीं है , क्या वह काम करता है? मैं jsx से परिचित नहीं हूँ ...