Introducción
Hablar de React es hablar del armado de vistas usando Componentes y State. Ahora bien, cuando empezamos a estudiar estos elementos, podemos notar que toda la funcionalidad atada al cambio de los valores de State y el Ciclo de Vida del Componente se aplica sin importar cómo se ve el elemento que eventualmente se termina mostrando. Esto se debe a que en el Front-End existe una distinción entre la lógica de visualización de un elemento y cómo ese elemento se verá.
En un desarrollo vanilla (sin uso de frameworks y/o librerías), la lógica de visualización de un elemento se realiza trabajando con JS. Por ejemplo, podemos armar una función que muestre un mensaje cuando el usuario aprieta un botón. Mientras que la forma de ese mensaje la moldeamos utilizando CSS.
React, una librería JS, es una herramienta pensada para facilitarnos la posibilidad de mostrar ese mensaje. Por ejemplo, podríamos hacer un Renderizado Condicional del mismo empleando el Hook useState. Mientras que la forma de ese mensaje, nuevamente, la generamos mediante CSS.
Aplicando Estilos
Existen varias formas en las que podemos aplicar CSS a nuestros Componentes de React.
La primera, y la que probablemente hayas visto varias veces, es a través del import de un archivo CSS dentro del archivo JS en que estamos construyendo nuestro Componente. Una vez hecho esto, nuestro código JSX tendrá la capacidad de adoptar dichos estilos. Esto significa que si en la Hoja de Estilos CSS usamos un selector h1 para darle un color rojo a ese elemento y en JSX creamos un elemento h1, el mismo se verá de color rojo una vez renderizada la vista.
Esto se puede hacer para cada Componente que generamos, es decir, que podemos tener un archivo CSS para cada archivo JS, haciendo que sea mucho más sencillo leer nuestras Hojas de Estilo.
En este punto es importante recordar que Webpack (o herramientas de construcción de archivos de producción similares —bundlers-) generan un único archivo CSS que es un compilado de todos los archivos CSS que vayamos importando a lo largo del desarrollo de nuestra aplicación. ¿Por qué nos interesa tener esto presente? Por las reglas de trabajo de CSS. Más precisamente la que dice que, en caso de modificar la misma propiedad de un mismo elemento en dos partes distintas del archivo, el valor a aplicarse será el último leído. Si hacemos un análisis del Árbol de Componentes podremos identificar fácilmente cuál es el último archivo incorporado al CSS de producción y, así, saber qué estilo quedará aplicado.
Por ejemplo, si dentro del Componente App importamos una hoja de estilos que aplica en color rojo a los elementos h1 y, además, importamos un Componente (llamémosle UnComponente) que tiene una hoja de estilos importada que le aplica un color azul a los elementos h1. El Componente UnComponente se encuentra por debajo del Componente App en el Árbol de Componentes, por lo que la hoja de estilos importada en aquel se agrega más abajo que la hoja de estilos importada en el Componente App al archivo CSS final. En consecuencia, los elementos h1 tendrán color azul y no rojo.
 |
Árbol de Componentes del ejemplo planteado |
Una buena práctica para evitar este tipo de conflictos es utilizar clases para aplicar estilos CSS a los Componentes y dejar los selectores más generalizados para usar en la Hoja de Estilos que incorporamos en el App, porque este es el primer Componente del Árbol de Componentes y, por tanto, podemos considerarlo como el Componente más global de nuestra aplicación. Cabe aclarar que cuando queremos aplicar estilos mediante clases de CSS en nuestros elementos JSX, debemos hacerlo a través de la prop (“atributo”) className.
Incluso es posible emplear la prop style para pasar un objeto plano que agregue estilos en línea. Esta práctica, al igual que en el desarrollo vanilla es desaconsejada, pero puede ser muy útil cuando queremos agregar algún estilo rápido a nuestro Componente.
Librerías CSS
Muchas veces, y por motivos varios, preferimos incorporar a nuestros proyectos herramientas como Bootstrap o Tailwind para ayudarnos con la aplicación de los distintos estilos CSS. Por su puesto, trabajando con React, también podremos aprovecharlas.
Más arriba hablábamos de la necesidad de tener presente que los bundlers (Webpack o similares) generan un único archivo CSS para el código de producción. Este trabajo vuelve a ser importante cuando queremos incorporar librerías CSS porque los archivos de producción se logran leyendo todas las dependencias (librerías de Node.js) y archivos utilizados en nuestro código de desarrollo.
En un proyecto desarrollado con Node.js cómo intérprete del código JavaScript, cada vez que queremos agregar alguna funcionalidad debemos hacerlo mediante el uso de dependencias. Es decir, para agregar una librería CSS debemos instalar la dependencia Node.js correspondiente.
Por ejemplo, para poder trabajar con Bootstrap, debemos seguir los siguientes pasos:
- Instalación de dependencias (npm i bootstrap @popperjs/core)
- Importar archivo CSS
- Importar código JS
A continuación vemos un ejemplo funcionando de bootstrap incorporado a nuestro proyecto
Redes