Urian Viera Full Stack Developer autodidacta
Urian Viera

05 Febrero 2024 : 09:21 p.m

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;

En este ejemplo, 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 ejemplo, 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.

¡Gracias por leer este artículo, está hecho con mucho esfuerzo y amor!

Urian Viera

👋 Ingeniero de Sistemas y Desarrollador Full Stack apasionado por el mundo del desarrollo de aplicaciones Web y Móviles. Mi experiencia abarca el Front-end y Back-end, encontrando equilibrio entre creatividad y eficiencia técnica.

Disfruto crear y compartir mis conocimientos de manera clara y directa para facilitar el aprendizaje rápido y efectivo.

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á!