¿Cómo podemos implementar estilos globales y dinámicos con Styled Components?
Para asegurarnos de que nuestras aplicaciones no solo tengan un diseño integrado, sino también un aspecto único y dinámico, podemos usar Styled Components. Esto nos permite combinar CSS directamente con nuestros componentes React. En esta sección, aprenderás a implementar estilos globales que cambian dinámicamente al interactuar con elementos, como cuando pasas el mouse sobre una película.
¿Cómo crear estilos globales?
Primero, debemos crear un componente para nuestros estilos globales. Esto se consigue con la función CreateGlobalStyle de Styled Components.
Dentro del archivo GlobalStyle.js, definimos que tanto el html como el body tendrán un color de fondo que se determinará por las propiedades del tema.
¿Cómo integrar este estilo global en nuestra aplicación?
Luego de definir nuestros estilos globales, debemos integrarlos dentro de nuestro Theme Provider, asegurándonos de que todos los componentes puedan manejar estas propiedades.
import{ThemeProvider}from'styled-components';import{GlobalStyle}from'./GlobalStyle';constApp=()=>{return(<ThemeProvidertheme={selectedTheme}><GlobalStyle/>{/* Otros componentes */}</ThemeProvider>);};
Aquí utilizamos ThemeProvider para pasar propiedades de tema a lo largo de nuestra aplicación, donde selectedTheme es la selección del tema actual.
¿Cómo hacer dinámico el cambio de temas?
La clave para un sitio web interactivo radica en permitir que los usuarios vean cambios visuales según su interacción. En nuestro caso, queremos que el tema cambie al pasar el mouse por una película específica.
Uso de React State para gestionar temas
Primero, manejamos el estado del tema usando el hook useState de React.
importReact,{ useState }from'react';const[theme, setTheme]=useState('Avengers');// Paso el estado directamente al ThemeProvider<ThemeProvidertheme={themes[theme]}></ThemeProvider>
Aquí, themes contiene las definiciones de estilo asociadas con cada película.
Actualizar el tema al interactuar con el componente
Cuando pasamos el mouse sobre una película, actualizamos el tema llamando a setTheme.
constMovieComponent=({ movieName, updateTheme })=>{return(<StyledComponentonMouseEnter={()=>updateTheme(movieName)}>{/* Renderizar información de película */}</StyledComponent>);};// Llama a cada componente con la función para actualizar tema<MovieComponentupdateTheme={setTheme}movieName="Terminator"/>
La función onMouseEnter utiliza updateTheme para cambiar el tema actual dependiendo del nombre de la película.
¿Cómo solucionar problemas comunes?
¿Qué ocurre si nada cambia al pasar el mouse por una película? Hay varios elementos a revisar:
Comprobación de funciones y parámetros: Asegúrate de que las funciones están correctamente referenciadas con onMouseEnter={() => updateTheme(movieName)}.
Verificación del estado inicial: Confirmar que el tema inicial (por ejemplo, "Avengers") está correctamente vinculado en useState.
Desafíos y formas de extender tu aprendizaje
Ahora que lo básico está implementado, invita a la creatividad en tu aplicación. Añade más películas, integra distintos colores o temas, o experimenta con animaciones para transiciones más atractivas.
Recuerda, la práctica hace maestro. Juega con estas configuraciones y diviértete mientras aprendes, ¡y no olvides compartir tus nuevas creaciones en los comentarios! Si te sientes valiente, en la siguiente clase exploraremos más acerca de CSS en JS con Svelte y el uso de otra herramienta popular, Emotion. ¡Te espero ahí!
Si y no, ajajaj no es por ser machista pero pues el logo da como a entender de que es algo como de mujeres, por lo de pintarse la uña.
Pintarse las uñas no es de hombres ni mujeres, igual que la programación. En este caso, el logo hace referencia a estilizar componentes en React, así como "estilizamos" las uñas con el esmalte. :wink:
Es la primera vez que entro a React y veo que están saltando de un archivo a otro y me parece todo muy confuso :/
Tranquilo, la gracia del curso es que puedas familiriazarte con los frameworks para tener mayor perspectiva.
La idea de la clase era ver el potencial de los Estilos dinámicos, lo tecnico ya lo vemos en los cursos especiales de react y styled components
Le agregué la portada de cada película al hacer hover :D
Quedo bien pero un color oscuro por default hace que el salto entre blanco y oscuro en el hover no sea tan brusco
Les cmparto lo que hice https://codesandbox.io/s/pelis-react-0lqw5?file=/src/Theme.js :D
Tantos archivos confunden, pero volviendo sobre cada paso se agarra el hilo. Muy bien explicado. En el mio definí un tema por defecto y que cambie el estilo sólo cuando el cursor esté encima de un formulario y al salir vuelva el estilo por defecto
excellent!!
Si teneis prisa usar chakra. Con chakra vais rapido no, lo siguiente
no entiendo porque no me funciona :( cuando hago hover me salta este error.
Hola,
Intenta usando los mismos nombres de las películas tanto en el nombre del objeto de los temas, como en el 'name' del arreglo de películas:
Osea aquí:
Y aquí:
Nota: No importan si el name tiene letras mayúsculas porque el método toLowerCase() se encarga de pasarlo a minúsculas, pero en el objeto de los temas si deben ser en minúscula.
Gracias por tu pregunta Valera y gracias por tu respuesta Gustavo, era justo ese el error y me estaba volviendo loco solucionándolo. De no ser por ti hubiese vuelto a empezar todo el vídeo.
Que tan recomendable es styled components en proyectos grandes?
Mucho. Sobre todo si el equipo piensa en sistemas de diseño. :D