Que tal isso? Vamos definir um If
componente de ajuda simples .
var If = React.createClass({
render: function() {
if (this.props.test) {
return this.props.children;
}
else {
return false;
}
}
});
E use-o desta maneira:
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>
);
}
ATUALIZAÇÃO: Como minha resposta está ficando popular, sinto-me obrigado a avisá-lo sobre o maior perigo relacionado a esta solução. Conforme apontado em outra resposta, o código dentro do <If />
componente é executado sempre, independentemente de a condição ser verdadeira ou falsa. Portanto, o exemplo a seguir falhará no caso de banner
is null
(observe o acesso à propriedade na segunda linha):
<If test={this.state.banner}>
<div id="banner">{this.state.banner.url}</div>
</If>
Você precisa ter cuidado ao usá-lo. Sugiro a leitura de outras respostas para abordagens alternativas (mais seguras).
ATUALIZAÇÃO 2: Olhando para trás, essa abordagem não é apenas perigosa, mas também desesperadamente complicada. É um exemplo típico de quando um desenvolvedor (eu) tenta transferir padrões e abordagens que conhece de uma área para outra, mas na verdade não funciona (nesse caso, outras linguagens de modelos).
Se você precisar de um elemento condicional, faça o seguinte:
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>
);
}
Se você também precisar da ramificação else, basta usar um operador ternário:
{this.state.banner ?
<div id="banner">{this.state.banner}</div> :
<div>There is no banner!</div>
}
É muito mais curto, mais elegante e seguro. Eu uso isso o tempo todo. A única desvantagem é que você não pode fazer else if
ramificações tão facilmente, mas isso geralmente não é tão comum.
De qualquer forma, isso é possível graças ao funcionamento dos operadores lógicos no JavaScript. Os operadores lógicos até permitem pequenos truques como este:
<h3>{this.state.banner.title || 'Default banner title'}</h3>
else
filial, isso funciona? Eu não estou familiarizado com JSX ...