Iconos con colores dinámicos

Clase 12 de 34Curso de React.js

Resumen

¿Cómo organizar estilos en React mediante CSS?

La organización de estilos en React puede parecer simple, pero conforme un proyecto crece puede volverse un desafío. Es fundamental separar cuidadosamente los estilos en archivos específicos. Podríamos tener un archivo CSS por cada componente, como un todoItem.css para contener los estilos del componente TodoItem. Así, podremos mantener la coherencia y facilitar el mantenimiento, actualizaciones o cambios en el futuro.

Para aplicar los estilos a los elementos de forma correcta, podemos separar la lógica de iconos. Creamos clases específicas como icon-container para el contenedor y una clase icon-svg para el SVG, dándoles estilos distintos, como ajustar su tamaño mediante propiedades CSS: width: 24px y height correspondiente.

Además, al emplear SVGs es importante recordar que podemos aplicar la propiedad fill directamente a través de CSS para cambiar sus colores, tanto de manera estática como dinámica.

¿Cómo añadir clases y enviar propiedades en componentes React?

Integrar clases y enviar propiedades a los componentes en React es una practica poderosa que permite dinamizar tu aplicación. En el caso de importar un SVG como React Component, puedes asignarle clases directamente desde el archivo JS donde se importa, lo cual se traduce en un manejo CSS más claro y eficiente.

Para el manejo de propiedades, si tenemos un componente que recibe props, como color, podemos utilizar esa propiedad para cambiar dinámicamente estilos y comportamientos. Si deseamos que, por ejemplo, un ícono tenga diferente color según su estado (completo o no), podemos enviar esta propiedad al componente y usarla en el elemento que lo necesite, como el SVG.

function CompleteIcon({ completed }) {
  const color = completed ? 'green' : 'gray';
  return <SVGComponent className="icon-svg" fill={color} />;
}

¿Cómo manejar eventos y estados en React?

Gestionar eventos y estados en React es crucial para lograr una aplicación interactiva. Se pueden definir funciones que manejen interacciones específicas y luego asignar esas funciones a eventos en los elementos, como el onClick.

function TodoItem({ onComplete, onDelete }) {
  return (
    <div>
      <span onClick={onComplete}>Done</span>
      <span onClick={onDelete}>Delete</span>
    </div>
  );
}

Aquí, los eventos se envían como props a los componentes, permitiendo que sean manejados de manera centralizada en el componente padre. Para mantener una comunicación fluida entre componentes y estados, se utilizan las props para enviar datos entre ellos.

Sin embargo, este enfoque puede volverse complicado si el número de props es elevado, resultando en un problema conocido como "prop drilling", que precisamente resolveremos con un enfoque más avanzado en módulos siguientes.

¿Cómo aplicar interacciones visuales con CSS en React?

Para mejorar la experiencia del usuario mediante interacciones visuales, CSS se convierte en una herramienta poderosa. Podemos manejar estados visuales como hover para cambiar el aspecto de los componentes al pasar el cursor sobre ellos.

Esto se logra aplicando selectores CSS específicos, como por ejemplo:

.icon-container:hover .icon-svg {
  fill: red;
}

Este ejemplo ilustra cómo al pasar el mouse sobre el contenedor de un ícono, su color cambia. Este tipo de integración CSS potencia la interfaz de usuario, haciendo la aplicación más reactiva e intuitiva.

No hay que olvidar considerar la accesibilidad y experiencia de usuario al diseñar las interacciones, asegurando que las transiciones y cambios de estado visual tengan sentido en el contexto de la aplicación.

¿Qué vendrá en el desarrollo de una aplicación React?

El desarrollo de aplicaciones React no termina con interactividad básica. A medida que una aplicación crece, es necesario adaptarse a nuevas prácticas, herramientas y mecanismos de organización que faciliten el desarrollo sostenible y escalable. Esto incluye soluciones al "prop drilling" que te permitirá gestionar tus estados de manera más eficiente.

Por lo tanto, la exploración no termina aquí. Continuemos el viaje para mejorar nuestras habilidades y conocimientos en React, propiciando que cada componente y función dentro de nuestra aplicación encuentren su espacio correcto. De esta manera, lograremos estructuras que sean capaces de abordar incluso las crecientes necesidades de nuestros usuarios. ¡Nos vemos en el siguiente módulo donde estos temas se desarrollarán aún más!