Peki buna ne dersin. Basit bir yardımcı Ifbileşen tanımlayalım .
var If = React.createClass({
render: function() {
if (this.props.test) {
return this.props.children;
}
else {
return false;
}
}
});
Ve şu şekilde kullanın:
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>
);
}
GÜNCELLEME: Cevabım popülerleştiğinden, sizi bu çözümle ilgili en büyük tehlike konusunda uyarmak zorunda hissediyorum. Başka bir cevapta belirtildiği gibi, <If />bileşenin içindeki kod , koşulun doğru olup olmadığına bakılmaksızın her zaman yürütülür. Bu nedenle aşağıdaki örnekte durumda başarısız olacaktır bannerolduğu null(ikinci satırda mülkiyet erişimini dikkat edin):
<If test={this.state.banner}>
<div id="banner">{this.state.banner.url}</div>
</If>
Kullanırken dikkatli olmalısınız. Alternatif (daha güvenli) yaklaşımlar için diğer cevapları okumanızı öneririm.
GÜNCELLEME 2: Geriye dönüp bakıldığında, bu yaklaşım sadece tehlikeli değil aynı zamanda umutsuzca hantaldır. Bir geliştiricinin (ben) bildiği kalıpları ve yaklaşımları bir alandan diğerine aktarmaya çalıştığının tipik bir örneğidir, ancak gerçekten işe yaramaz (bu durumda diğer şablon dilleri).
Koşullu bir öğeye ihtiyacınız varsa, bunu şu şekilde yapın:
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>
);
}
Başka şubeye de ihtiyacınız varsa, üçlü bir operatör kullanın:
{this.state.banner ?
<div id="banner">{this.state.banner}</div> :
<div>There is no banner!</div>
}
Çok daha kısa, daha zarif ve güvenli. Her zaman kullanıyorum. Tek dezavantajı, bu else ifkadar kolay dallanma yapamazsınız , ancak genellikle bu yaygın değildir.
Her neyse, bu JavaScript'teki mantıksal işleçlerin çalışması sayesinde mümkündür . Mantıksal operatörler bunun gibi küçük numaralara bile izin verir:
<h3>{this.state.banner.title || 'Default banner title'}</h3>
elseşubeniz yoksa, bu işe yarıyor mu? Ben jsx aşina değilim ...