El renderizado condicional en React permite que la interfaz de usuario cambie según el estado de la aplicación o las condiciones establecidas. Este tipo de renderizado es esencial para manejar diferentes situaciones en la interfaz, como mostrar mensajes personalizados, ocultar o mostrar elementos, o cambiar estilos dinámicamente.
En React, el renderizado condicional se logra utilizando operadores de JavaScript, como if-else, el operador ternario (? :), y el operador lógico &&. Esto permite que ciertos elementos o componentes se muestren solo si se cumple una condición.
? :): Simplifica las condiciones en JSX para mostrar uno de dos posibles resultados.&&: Útil para mostrar un elemento si se cumple una condición.if-else: Se usa fuera de JSX, en funciones que devuelven JSX, para casos más complejos.Si condition es verdadera, renderiza el componente <TrueComponent /> de lo contrario, renderiza el componente <FalseComponent />.
{condition ? <TrueComponent /> : <FalseComponent />} El fragmento de código muestra una condición simple en la que se muestra un mensaje si existe; de lo contrario, se muestra un mensaje predeterminado indicando la ausencia de contenido.
{message ? <p>{message}</p> : <p>No hay mensaje</p>} Este código muestra el componente MyComponent solo si showComponent es verdadero; de lo contrario, no se renderiza nada.
{showComponent ? <MyComponent /> : null} El color del texto cambia a rojo si isError es verdadero y a verde si es falso, proporcionando una indicación visual del estado.
<div style={{ color: isError ? 'red' : 'green' }}>Este texto cambia de color</div> Se renderiza una lista ordenada (<ol>) si type es igual a ‘ordered’; de lo contrario, se renderiza una lista desordenada (<ul>), ambas generadas a partir de los elementos en items.
{type === 'ordered' ? <ol>{items.map(item => <li key={item}>{item}</li>)}</ol> : <ul>{items.map(item => <li key={item}>{item}</li>)}</ul>} El botón que ejecuta handleAdminAction se muestra solo si isAdmin es verdadero; de lo contrario, no se renderiza nada.
{isAdmin ? <button onClick={handleAdminAction}>Acción de admin</button> : null} Se muestra el mensaje “Bienvenido de nuevo!” si isLoggedIn es verdadero; de lo contrario, se invita al usuario a iniciar sesión.
const isLoggedIn = true;
return (
<div>
{isLoggedIn ? <p>Bienvenido de nuevo!</p> : <p>Por favor, inicia sesión.</p>}
</div>
); Se muestra “Buenos días” si isMorning es verdadero; de lo contrario, se muestra “Buenas noches”.
const isMorning = true;
return (
<div>
<p>{isMorning ? 'Buenos días' : 'Buenas noches'}</p>
</div>
); El botón tiene la clase button-active si isActive es verdadero, y muestra el texto “Activo”; si es falso, tiene la clase button-inactive y muestra “Inactivo”.
const isActive = true;
return (
<button className={isActive ? 'button-active' : 'button-inactive'}>
{isActive ? 'Activo' : 'Inactivo'}
</button>
); if-else.&&La sintaxis del operador lógico && se interpreta como:
“Si condition es verdadera, renderiza <Component />”.
Si la condición es falsa, no se renderiza nada.
{condition && <Component />} condition: Es una expresión que debe evaluarse a true o false.<Component />: El componente o el elemento JSX que se renderiza solo si la condición es true.const isAuthenticated = true;
return (
<div>
{isAuthenticated && <p>Bienvenido, usuario autenticado.</p>}
</div>
); isAuthenticated es true, se muestra el mensaje de bienvenida. Si es false, no se renderiza nada.const hasError = false;
return (
<div>
{hasError && <p className="error">Hubo un error, por favor intenta nuevamente.</p>}
</div>
); Si hasError es true, se muestra el mensaje de error. Si es false, no se renderiza nada.
const tasks = ['Tarea 1', 'Tarea 2'];
return (
<div>
{tasks.length > 0 && (
<ul>
{tasks.map(task => <li key={task}>{task}</li>)}
</ul>
)}
</div>
); Si la longitud del array tasks es mayor a 0, se muestra la lista de tareas. Si está vacío, no se renderiza nada.
const isLoading = true;
return (
<div>
{isLoading && <span className="loading-icon">Cargando...</span>}
</div>
); Si isLoading es true, se muestra un ícono o mensaje de carga. Si es false, no se renderiza nada.
&&: Este operador es útil cuando solo quieres renderizar un elemento si una condición es verdadera. Si la condición es falsa, no se renderiza nada.if/elseLa sintaxis de las declaraciones if/else en React se usa fuera del JSX y se emplea para situaciones en las que la lógica es más compleja.
if (condition) {
// Código que se ejecuta si la condición es verdadera
return <TrueComponent />;
} else {
// Código que se ejecuta si la condición es falsa
return <FalseComponent />;
} const isSubscribed = false;
if (isSubscribed) {
return <p>Gracias por tu suscripción.</p>;
} else {
return <p>Suscríbete para obtener más contenido.</p>;
} const userRole = 'admin';
if (userRole === 'admin') {
return <AdminDashboard />;
} else {
return <UserDashboard />;
} const isLoading = true;
if (isLoading) {
return <p>Cargando...</p>;
} else {
return <DataComponent />;
} isLoading es true), muestra un mensaje de carga; de lo contrario, renderiza el componente con los datos cargados.Este patrón permite “salir” de una función rápidamente en lugar de tener múltiples niveles de anidación. Es útil cuando se tienen varias condiciones y quieres hacer el código más limpio.
if (!condition) return null;
return <Component />; Si el usuario no está autenticado, se muestra un mensaje y no se renderiza el componente principal.
const isLoggedIn = false;
const Dashboard = () => {
if (!isLoggedIn) return <p>Por favor, inicia sesión para acceder al dashboard.</p>;
return <h1>Bienvenido al Dashboard</h1>;
}; Si el valor de la propiedad userId no está presente, no se hace nada y se retorna null o un mensaje.
const UserProfile = ({ userId }) => {
if (!userId) return <p>Usuario no encontrado</p>;
return <div>Perfil del usuario {userId}</div>;
}; Antes de renderizar el contenido, se valida si los datos están siendo cargados y se muestra un mensaje de carga.
const LoadingComponent = ({ isLoading, data }) => {
if (isLoading) return <p>Cargando...</p>;
if (!data) return <p>No hay datos disponibles</p>;
return <div>{data}</div>;
}; Si el usuario no tiene el rol adecuado, se muestra un mensaje de acceso denegado y no se renderiza el contenido adicional.
const AdminPanel = ({ userRole }) => {
if (userRole !== 'admin') return <p>Acceso denegado</p>;
return <div>Panel de Administración</div>;
}; isLoggedIn, userId, isLoading o userRole).