Renderizado condicional
Un visitante conectado ve un panel de control, uno desconectado ve un formulario de inicio de sesión, y una solicitud fallida necesita que aparezca un mensaje de error en algún lugar de la página. Un booleano como isLoggedIn generalmente vive en estado, y lo que cambia es cuál fragmento de interfaz se renderiza según su valor actual. JSX es JavaScript, así que decidir qué renderizar funciona igual que cualquier otra decisión en tu código: una expresión que elige un valor, evaluada ahí mismo en la declaración return.
Elegir entre dos elementos con un operador ternario
Cuando hay exactamente dos cosas que un fragmento de interfaz podría ser, el operador ternario elige entre ellas:
return (
<div>
{isLoggedIn ? <Dashboard /> : <Login />}
{hasError && <p>Algo salió mal</p>}
</div>
)isLoggedIn ? <Dashboard /> : <Login /> se lee igual que cualquier otro ternario: si isLoggedIn es verdadero, esta expresión se evalúa a <Dashboard />, si no, se evalúa a <Login />. Lo que sea que evalúe se renderiza en ese lugar del JSX. Las llaves son lo que te permite insertar una expresión JavaScript en medio del marcado, y un ternario es una expresión como cualquier otra.
Mostrar u ocultar un elemento con &&
La segunda línea maneja una forma diferente de decisión: mostrar algo, u no mostrar nada. hasError && <p>Algo salió mal</p> usa el operador && de la manera que funciona en todas partes en JavaScript. Si hasError es false, && cortocircuita y toda la expresión se evalúa a false, sin nunca llegar al JSX de la derecha. Si hasError es true, la expresión se evalúa al elemento <p>.
La razón por la que esto se renderiza correctamente depende de lo que React hace con el resultado. React no renderiza nada para false, null, y undefined, así que cuando hasError es false, nada aparece en la página en absoluto.
La trampa de los valores falsos
&& no solo produce true o false. Como cualquier expresión JavaScript que usa &&, se evalúa al lado en el que termina, y ese lado puede ser cualquier valor, no necesariamente un booleano. La mayoría del tiempo eso es inofensivo, pero se convierte en un error cuando el lado izquierdo es un número:
{count && <Badge />}
// count = 0 → renderiza "0" en la páginaSi count es 0, esta expresión se evalúa a 0. React no renderiza nada para false, null, y undefined, pero 0 es un valor real y renderizable, así que React lo pone en la página. El distintivo no aparece, pero un 0 extraviado sí, justo donde esperabas nada.
La solución es asegurarte de que el lado izquierdo de && siempre sea un booleano real:
{count > 0 && <Badge />}
// count = 0 → no renderiza nadacount > 0 siempre se evalúa a true o false, así que la expresión renderiza el distintivo o no renderiza nada, sin dejar ningún 0 atrás.
No renderizar nada en absoluto
A veces un componente no tiene nada que mostrar, y la forma más clara de decirlo es retornar temprano:
function Banner({ message }) {
if (!message) {
return null
}
return <p className="banner">{message}</p>
}Cuando message está vacío, la función retorna null antes de construir el resto del JSX. Eso mantiene el return principal enfocado en el caso donde hay realmente algo que renderizar, en lugar de envolver todo en una condición más.
&& muestra un elemento o nada, y retornar null de un componente es cómo dices "no hay nada que renderizar aquí". Cuidado con {count && <Badge />} cuando count puede ser 0, ya que 0 es un valor que React realmente imprimirá. Escribir {count > 0 && <Badge />} en su lugar mantiene el lado izquierdo como un verdadero booleano.
Lo siguiente: Formularios, donde usarás estado para manejar campos de entrada.

