¿Qué hay de esto? Definamos un Ifcomponente de ayuda simple .
var If = React.createClass({
render: function() {
if (this.props.test) {
return this.props.children;
}
else {
return false;
}
}
});
Y úsalo de esta manera:
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>
);
}
ACTUALIZACIÓN: a medida que mi respuesta se está volviendo popular, me siento obligado a advertirle sobre el mayor peligro relacionado con esta solución. Como se señaló en otra respuesta, el código dentro del <If />componente se ejecuta siempre independientemente de si la condición es verdadera o falsa. Por lo tanto, el siguiente ejemplo fallará en caso de que bannersea null(tenga en cuenta el acceso a la propiedad en la segunda línea):
<If test={this.state.banner}>
<div id="banner">{this.state.banner.url}</div>
</If>
Tienes que tener cuidado cuando lo usas. Sugiero leer otras respuestas para enfoques alternativos (más seguros).
ACTUALIZACIÓN 2: Mirando hacia atrás, este enfoque no solo es peligroso sino también desesperadamente engorroso. Es un ejemplo típico de cuando un desarrollador (yo) intenta transferir patrones y enfoques que conoce de un área a otra, pero realmente no funciona (en este caso, otros lenguajes de plantilla).
Si necesita un elemento condicional, hágalo así:
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>
);
}
Si también necesita la rama else, solo use un operador ternario:
{this.state.banner ?
<div id="banner">{this.state.banner}</div> :
<div>There is no banner!</div>
}
Es mucho más corto, más elegante y seguro. Lo uso todo el tiempo. La única desventaja es que no se puede else iframificar tan fácilmente, pero eso no suele ser tan común.
De todos modos, esto es posible gracias a cómo funcionan los operadores lógicos en JavaScript. Los operadores lógicos incluso permiten pequeños trucos como este:
<h3>{this.state.banner.title || 'Default banner title'}</h3>
elserama? ¿Funciona eso? No estoy familiarizado con jsx ...