A co z tym. Zdefiniujmy prosty If
komponent pomocniczy .
var If = React.createClass({
render: function() {
if (this.props.test) {
return this.props.children;
}
else {
return false;
}
}
});
I użyj tego w ten sposób:
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>
);
}
AKTUALIZACJA: Ponieważ moja odpowiedź staje się popularna, czuję się zobowiązany do ostrzeżenia cię przed największym niebezpieczeństwem związanym z tym rozwiązaniem. Jak wskazano w innej odpowiedzi, kod wewnątrz <If />
komponentu jest wykonywany zawsze, niezależnie od tego, czy warunek jest prawdziwy, czy fałszywy. Dlatego poniższy przykład zawiedzie w przypadku, gdy banner
jest null
(zwróć uwagę na dostęp do właściwości w drugim wierszu):
<If test={this.state.banner}>
<div id="banner">{this.state.banner.url}</div>
</If>
Musisz zachować ostrożność podczas korzystania z niego. Sugeruję przeczytanie innych odpowiedzi dla alternatywnych (bezpieczniejszych) podejść.
AKTUALIZACJA 2: Patrząc wstecz, takie podejście jest nie tylko niebezpieczne, ale także wyjątkowo kłopotliwe. Jest to typowy przykład sytuacji, gdy programista (ja) próbuje przenieść wzorce i podejścia, które zna z jednego obszaru do drugiego, ale tak naprawdę to nie działa (w tym przypadku inne języki szablonów).
Jeśli potrzebujesz elementu warunkowego, zrób to w ten sposób:
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>
);
}
Jeśli potrzebujesz również gałęzi else, po prostu użyj operatora trójskładnikowego:
{this.state.banner ?
<div id="banner">{this.state.banner}</div> :
<div>There is no banner!</div>
}
Jest o wiele krótszy, bardziej elegancki i bezpieczny. Używam tego cały czas. Jedyną wadą jest to, że nie można tak else if
łatwo rozgałęziać, ale zwykle nie jest to tak powszechne.
W każdym razie jest to możliwe dzięki działaniu operatorów logicznych w JavaScript. Operatory logiczne dopuszczają nawet takie małe sztuczki:
<h3>{this.state.banner.title || 'Default banner title'}</h3>
else
oddziału, czy to działa? Nie znam jsx ...