Urian Viera Full Stack Developer autodidacta
Urian Viera

Full Stack Developer

Renderizado Condicional en React?
Una Guía Práctica

El renderizado condicional, es una técnica fundamental en React que te permite mostrar u ocultar elementos en función de ciertas condiciones. En este post, exploraremos cómo implementar el renderizado condicional de manera efectiva en tus aplicaciones React.

Urian Viera, Desarrollador Full Stack en acción

¿Qué es el Renderizado Condicional?

El renderizado condicional es la práctica de renderizar componentes basados en una condición específica. Esto te permite controlar qué elementos se muestran en la interfaz de usuario en función del estado o las propiedades de tu componente.

1. Renderizado Condicional con If/Else en JSX

jsx

function Saludo({ estaAutenticado }) {
  // Verificar si el usuario está autenticado
  if (estaAutenticado) {
    return <h1>Bienvenido de nuevo</h1>;
  } else {
    return <h1>Inicia sesión, por favor</h1>;
  }
}

export default Saludo;

Observa el siguiente caso, creamos un componente Saludo que toma una prop llamada estaAutenticado. Dentro del componente, Luego verificamos si el usuario está autenticado utilizando una sentencia if-else.

  1. Si estaAutenticado es true, el componente renderizará el mensaje "Bienvenido de nuevo".
  2. Si estaAutenticado es false, el componente renderizará el mensaje "Inicia sesión, por favor".

2. Renderizado Condicional con Operador Ternario

Ejemplo #1
jsx
{estaAutenticado ? <h1>Bienvenido de nuevo</h1> : <h1>Inicia sesión, por favor</h1>}

Este ejemplo utiliza el operador ternario para mostrar "Bienvenido de nuevo" si estaAutenticado es true, de lo contrario muestra "Inicia sesión, por favor".

Ejemplo #2
jsx
const Saludar =(estaAutenticado)=> {
  return (
    <div>
      {estaAutenticado ? (
        <h1>Bienvenido de nuevo</h1>
      ) : (
        <h1>Inicia sesión, por favor</h1>
      )}
    </div>
  );
}
export default Saludar;

3. Sentencias Switch (poco usada)

jsx
const TipoMensaje = ({ tipo }) => {
  let mensaje;

  switch (tipo) {
    case 'error':
      mensaje = 'Ha ocurrido un error.';
      break;
    case 'advertencia':
      mensaje = 'Atención: esta es una advertencia.';
      break;
    case 'exito':
      mensaje = 'Operación completada con éxito.';
      break;
    default:
      mensaje = 'Mensaje no reconocido.';
  }

  return <div>{mensaje}</div>;
}

export default TipoMensaje;

En este contexto, `TipoMensaje` utiliza una sentencia `switch` para asignar un mensaje específico a la variable mensaje según el valor de tipo:

  1. Si tipo es 'error', se asigna el mensaje 'Ha ocurrido un error.'.
  2. Si tipo es 'advertencia', se asigna el mensaje 'Atención: esta es una advertencia.'.
  3. Si tipo es 'exito', se asigna el mensaje 'Operación completada con éxito.'.
  4. Si tipo no coincide con ninguno de los casos anteriores, se asigna el mensaje 'Mensaje no reconocido.'.

4. Renderizado condicional con React Hooks

jsx
const Example = (props) => {
  const [estaAutenticado, setEstaAutenticado] = useState(false);

  return (
    <div>
      {estaAutenticado ? <h1>¡Bienvenido de nuevo!</h1> : <h1>Por favor, inicia sesión.</h1>}
      <button onClick={() => setEstaAutenticado(!estaAutenticado)}>
        {estaAutenticado ? 'Cerrar sesión' : 'Iniciar sesión'}
      </button>
    </div>
  );
}

export default Example;

Esta función Example renderiza un mensaje de bienvenida si isLoggedIn es true (indicando que el usuario ha iniciado sesión) y un mensaje para iniciar sesión si isLoggedIn es false. Además, un botón permite cambiar el estado de isLoggedIn entre true y false, simulando el inicio y cierre de sesión.

5. Operadores Lógicos

jsx
const Example = (props) => {
  return (
    <div>
      {
        props.estaAutenticado ? 
        <h1>¡Bienvenido de nuevo!</h1> 
       :<h1>Por favor, inicia sesión.</h1>
      }
    </div>
  );
}

export default Example;

La función Example renderiza un mensaje de "¡Bienvenido de nuevo!" si la prop estaAutenticado es true, lo cual indica que el usuario ha iniciado sesión. Si estaAutenticado es false, muestra el mensaje "Por favor, inicia sesión".

¿Qué hay de malo en este código?

jsx
const ListaContactos = ({ contactos }) => {
  return (
    <div>
      <ul>
        {contactos.length &&
          contactos.map(contacto => (
            <li key={contacto.id}>
              {contacto.nombre} {contacto.telefono}
            </li>
          ))}
      </ul>
    </div>
  );
}

La función parece estar bien en términos de funcionalidad básica. Renderiza una lista de contactos con sus nombres y teléfonos si el array contactos no está vacío.

¿Que pasaría si contactos es un array vacío?

La expresión {contactos.length && ...} se evaluará como falso solo cuando contactos.length es 0. Esto significa que si contactos es un array vacío, la expresión se evaluará como falso y no se mostrará ningún elemento en la lista.

Solución #1
jsx
function ListaContactos({ contactos }) {
  return (
    <div>
      <ul>
        {
            contactos.map(contacto => (
                <li key={contacto.id}>
                    {contacto.nombre} {contacto.telefono}
                </li>
            ))
        }
      </ul>
    </div>
  );
}

De esta manera, la lista se renderizará correctamente incluso si contacts es un array vacío. Esto hace que el código sea más predecible y fácil de entender para otros desarrolladores que puedan revisarlo.

Solución #1

Soy muy consciente de que podríamos haber resuelto el problema de contactos usando !!contactos.length && ...o contactos.length > 0 && ...o incluso Boolean(contactos.length) && ..., pero prefiero ser explícito usando un ternario.

jsx
const ListaContactos = ({ contactos }) => {
  return (
    <div>
      <ul>
        {contactos.length
          ? contactos.map((contacto) => (
              <li key={contacto.id}>
                {contacto.nombre} {contacto.telefono}
              </li>
            ))
          : "No hay contactos"}
      </ul>
    </div>
  );
};

export default ListaContactos;

La función ListaContactos renderiza una lista de contactos con nombres y teléfonos si hay elementos en el array proporcionado como prop. Utiliza un operador ternario para realizar renderizado condicional y asigna claves únicas a cada elemento de la lista.

En conclusión

El renderizado condicional es una parte crucial del desarrollo de mis aplicaciones React. Me permite crear interfaces dinámicas y adaptativas que responden a mis acciones como usuario y a los cambios en el estado de mi aplicación. Con estos ejemplos básicos, espero haber comprendido cómo implementar el renderizado condicional de manera efectiva en mis propias aplicaciones React.

👋 Soy Urian Viera, Ingeniero de Sistemas y Fullstack Developer autodidacta con más de 10 años de experiencia construyendo soluciones sólidas, escalables y de alto rendimiento.

Habilidades:

Frontend: HTML, CSS, React, Next.js, Astro, Svelte, JavaScript, TypeScript, HTMX, Tailwind, Bootstrap, Vite, Redux, Zustand, Context API, Axios, EJS, optimización SEO y lazy loading.

Backend: PHP (Laravel), Node.js (Express), Python (Django, Flask, FastAPI) y Flutter (Dart) para desarrollo fullstack.

Bases de datos: SQL, MySQL, PostgreSQL, MongoDB, SQL Server, Firebase, Supabase y SQLite.

Experiencia en optimización de consultas, diseño relacional, migraciones, backups, y gestión de datos en la nube.

Servidores y DevOps: Nginx, Apache, Docker, VPS, Cloudflare, PythonAnywhere, Cloudinary, Railway, integración CI/CD, despliegues automatizados, Git, GitHub, Bitbucket y GitLab.

Otras habilidades: desarrollo de sistemas empresariales, plataformas e-commerce personalizadas, dashboards administrativos, sistemas de reservas, gestión de usuarios y roles, blogs dinámicos, foros, chats en tiempo real, autenticación JWT/OAuth, WebSockets y microservicios etc.

Desarrollo móvil: apps híbridas para Android e iOS con Flutter y React Native.

Apasionado por el código limpio, la automatización y la creación de experiencias fluidas.

🚀 Librerías NPM

También soy autor de varias librerías publicadas en NPM, creadas con el propósito de aportar herramientas útiles, modernas y ligeras a la comunidad de desarrolladores.

📦
nextjs-toast-notify

Una librería que transforma la forma en que gestionas las notificaciones en tus aplicaciones Next.js, ofreciendo una experiencia de usuario fluida y sin interrupciones.

loading-request

La librería más potente y sencilla para mostrar indicadores de carga modernos en aplicaciones web. Perfecta para mejorar la interacción visual durante las peticiones HTTP o procesos asíncronos.

🧩
react-use-form-lite

Una librería moderna, liviana y sin dependencias externas, diseñada para manejar formularios en React de forma rápida, escalable y flexible.

🔥
toastjs-notifications

Una librería de notificaciones toast elegante y minimalista, con animaciones suaves, diseño moderno y una UX impecable para cualquier proyecto web.

Experiencias
Urian Viera full stack developer - Edumedia Tech
Edumedia Tech

Coordinador de Desarrollo

Urian Viera full stack developer - Dugotex S.A
Dugotex S.A

Desarrollador full stack

Urian Viera full stack developer - AECSA
AECSA

Desarrollador Sénior

Urian Viera full stack developer - Bull Marketing S.A.S
Bull Marketing S.A.S

Programador Web

Urian Viera full stack developer - Permutasalcuadrado
Permutasalcuadrado

Desarrollador de aplicaciones Web

Urian Viera full stack developer - Apure Tv (Canal de televisión)
Apure Tv (Canal de televisión)

Coordinador de Sistemas

😲 Mi Primer Paquete NPM

Loading Request es un paquete npm diseñado para ofrecer un indicador de carga visual durante cualquier solicitud o proceso asíncrono en JavaScript. Su objetivo es mejorar la experiencia del usuario al proporcionar una integración sencilla y una personalización completa.

Échale un vistazo a este paquete npm ¡sin duda te encantará!

🔥 Mi Segundo Paquete NPM

Nextjs Toast Notify es un paquete npm imprescindible para agregar notificaciones emergentes (toasts) a tus aplicaciones web con Next.js. Ideal para proporcionar retroalimentación visual clara y efectiva sin interrumpir la experiencia del usuario.

Échale un vistazo a este paquete npm ¡sin duda te encantará!

Fotos
Urian Viera full stack developer
Urian Viera full stack developer
Urian Viera full stack developer
Urian Viera full stack developer
Urian Viera full stack developer