Was ist damit? Definieren wir eine einfache Hilfskomponente If
.
var If = React.createClass({
render: function() {
if (this.props.test) {
return this.props.children;
}
else {
return false;
}
}
});
Und benutze es so:
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: Da meine Antwort immer beliebter wird, fühle ich mich verpflichtet, Sie vor der größten Gefahr im Zusammenhang mit dieser Lösung zu warnen. Wie in einer anderen Antwort ausgeführt, wird der Code in der <If />
Komponente immer ausgeführt, unabhängig davon, ob die Bedingung wahr oder falsch ist. Daher schlägt das folgende Beispiel fehl, falls dies der Fall banner
ist null
(beachten Sie den Eigenschaftszugriff in der zweiten Zeile):
<If test={this.state.banner}>
<div id="banner">{this.state.banner.url}</div>
</If>
Sie müssen vorsichtig sein, wenn Sie es verwenden. Ich schlage vor, andere Antworten für alternative (sicherere) Ansätze zu lesen.
UPDATE 2: Rückblickend ist dieser Ansatz nicht nur gefährlich, sondern auch äußerst umständlich. Es ist ein typisches Beispiel dafür, wie ein Entwickler (ich) versucht, Muster und Ansätze, die er kennt, von einem Bereich in einen anderen zu übertragen, aber es funktioniert nicht wirklich (in diesem Fall in anderen Vorlagensprachen).
Wenn Sie ein bedingtes Element benötigen, gehen Sie folgendermaßen vor:
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>
);
}
Wenn Sie auch den Zweig else benötigen, verwenden Sie einfach einen ternären Operator:
{this.state.banner ?
<div id="banner">{this.state.banner}</div> :
<div>There is no banner!</div>
}
Es ist viel kürzer, eleganter und sicherer. Ich benutze es die ganze Zeit. Der einzige Nachteil ist, dass Sie nicht so einfach else if
verzweigen können, aber das ist normalerweise nicht so häufig.
Dies ist jedoch möglich, da logische Operatoren in JavaScript funktionieren. Die logischen Operatoren erlauben sogar kleine Tricks wie diesen:
<h3>{this.state.banner.title || 'Default banner title'}</h3>
else
Filiale haben ? Funktioniert das? Ich bin nicht vertraut mit jsx ...