no entiendo porque no me funciona 😦 cuando hago hover me salta este error. ThemeProvider: “theme” prop is required. <code>// App.js impo...

Anfernee Valera

Anfernee Valera

EstudiantePregunta

no entiendo porque no me funciona 😦 cuando hago hover me salta este error.

ThemeProvider: “theme” prop is required.

// App.js import React from "react"; import { Theme } from "./Theme"; import { Title } from "./Title"; import Form from "./form"; const movies = [ { name: "Avengers", available: 5 }, { name: "Thor", available: 3 } ]; export default function App() { const [theme, setTheme] = React.useState("Avengers"); return ( <Theme theme={theme}> <Title>Películas</Title> {movies.map((movie) => ( <Form movie={movie} updateTheme={() => setTheme(movie.name)} /> ))} </Theme> ); } // GlobalStyle.js import { createGlobalStyle } from "styled-components"; export const GlobalStyle = createGlobalStyle` html, body { background: ${(p) => p.theme.bg} } `; // Theme.js import { ThemeProvider } from "styled-components"; import { GlobalStyle } from "./GlobalStyle"; const themes = { avengers: { bg: "#ceceff", color: "#335", color2: "rgba(5, 5, 100, 0.5)" }, terminator: { bg: "#ccffcc", color: "#010", color2: "rgba(50, 100, 50, 0.5)" } }; export const Theme = (props) => ( <ThemeProvider theme={themes[props.theme.toLowerCase()]}> <GlobalStyle /> {props.children} </ThemeProvider> ); // form.js import React from "react"; import styled from "styled-components"; const StyledForm = styled.form` font-family: courier; margin: 0 50px 25px; padding: 10px 25px 25px; text-align: center; transform: scale(1); transition: transform 0.3s; &:hover { transform: scale(1.2); } `; const StyledButton = styled.button` cursor: pointer; padding: 5px 10px; border: 1px solid transparent; transition: 0.15s border-color; &:hover { border-color: ${(p) => p.theme.color2}; } &[disabled] { background: ${(p) => p.theme.color2}; } `; export default function Form(props) { const [quantity, setQuantity] = React.useState(0); const { movie } = props; return ( <StyledForm onMouseEnter={() => props.updateTheme()}> <h3>{movie.name}</h3> <StyledButton type="button" onClick={() => setQuantity(quantity - 1)} disabled={quantity <= 0} > - </StyledButton> {quantity} <StyledButton type="button" onClick={() => setQuantity(quantity + 1)} disabled={quantity >= movie.available} > + </StyledButton> </StyledForm> ); }
3 respuestas
    Gustavo Gonzalez Montero

    Gustavo Gonzalez Montero

    Estudiante

    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.

    Ricardo Mazuera

    Ricardo Mazuera

    Estudiante

    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.

    Rubén Ernesto Aragón Gil

    Rubén Ernesto Aragón Gil

    Estudiante

    Igualmente a mi me arrojaba el error, solo agregué el mismo nombre y taran.

Curso de Frameworks y Librerías de JavaScript

Curso de Frameworks y Librerías de JavaScript

Explora los frameworks y librerías de JavaScript como React, Angular y Vue para desarrollar aplicaciones interactivas. Aprende a gestionar estados, crear componentes reutilizables y manejar rutinas de datos para aplicaciones modernas y dinámicas.

Curso de Frameworks y Librerías de JavaScript
Curso de Frameworks y Librerías de JavaScript

Curso de Frameworks y Librerías de JavaScript

Explora los frameworks y librerías de JavaScript como React, Angular y Vue para desarrollar aplicaciones interactivas. Aprende a gestionar estados, crear componentes reutilizables y manejar rutinas de datos para aplicaciones modernas y dinámicas.