เกี่ยวกับสิ่งนี้ เรามากำหนด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>
);
}
UPDATE:เนื่องจากคำตอบของฉันกำลังได้รับความนิยมฉันรู้สึกว่าต้องเตือนคุณเกี่ยวกับอันตรายที่ใหญ่ที่สุดที่เกี่ยวข้องกับโซลูชันนี้ ดังที่ได้อธิบายไว้ในคำตอบอื่น ๆ รหัสภายใน<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
แยกได้ง่าย ๆ แต่โดยทั่วไปแล้วจะไม่เป็นเช่นนั้น
อย่างไรก็ตามนี่เป็นไปได้ที่ต้องขอบคุณตัวดำเนินการเชิงตรรกะใน JavaScript ตัวดำเนินการเชิงตรรกะอนุญาตให้ใช้เทคนิคเล็กน้อยเช่นนี้:
<h3>{this.state.banner.title || 'Default banner title'}</h3>
else
สาขาก็จะทำงานได้หรือไม่ ฉันไม่คุ้นเคยกับ jsx ...