Peki buna ne dersin. Basit bir yardımcı If
bileş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 banner
olduğ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 if
kadar 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 ...