Renderizado condicional
Un visitante que inició sesión ve un panel de control, uno que no inició sesión ve un formulario de login, y una solicitud fallida necesita mostrar un mensaje de error en algún lugar de la página. Un booleano como isLoggedIn generalmente vive en el estado, y lo que cambia es cuál pieza 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 justo en la declaración return.
Elegir entre dos elementos con un operador ternario
Cuando hay exactamente dos cosas que una pieza 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 />, de lo contrario se evalúa a <Login />. Lo que sea que se evalúe se renderiza en ese lugar del JSX. Las llaves son lo que te permite insertar una expresión JavaScript en el medio del marcado, y un ternario es una expresión como cualquier otra.
Mostrar u ocultar un elemento con &&
La segunda línea maneja un tipo diferente de decisión: mostrar algo, u no mostrar nada. hasError && <p>Algo salió mal</p> usa el operador && tal como funciona en cualquier otro lugar de JavaScript. Si hasError es false, && cortocircuita y toda la expresión se evalúa a false, sin llegar nunca 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 qué hace React con el resultado. React no renderiza nada para false, null e undefined, así que cuando hasError es false, nada aparece en la página.
La trampa de los valores falsos
&& no solo produce true o false. Como cualquier expresión JavaScript que usa &&, se evalúa a lo que sea que alcance, y ese lado puede ser cualquier valor, no necesariamente un booleano. La mayoría de las veces 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 e undefined, pero 0 es un valor real y renderizable, así que React lo pone en la página. El badge no aparece, pero un 0 suelto sí, justo donde esperabas que no hubiera nada.
La solución es asegurarse de que el lado izquierdo de && sea siempre un booleano actual:
{count > 0 && <Badge />}
// count = 0 → no renderiza nadacount > 0 siempre se evalúa a true o false, así que la expresión renderiza el badge o no renderiza nada, sin dejar un 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 devolver temprano:
function Banner({ message }) {
if (!message) {
return null
}
return <p className="banner">{message}</p>
}Cuando message está vacío, la función devuelve null antes de construir el resto del JSX. Eso mantiene el return principal enfocado en el caso donde realmente hay algo que renderizar, en lugar de envolver todo en una condición más.
&& muestra un elemento o no muestra nada, y devolver null desde un componente es cómo dices "no hay nada que renderizar aquí". Ten 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 booleano verdadero. A continuación: Formularios, donde usarás estado para manejar campos de entrada.

