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

Pregunta
studenthace 3 años

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
para escribir tu comentario
    Rubén Ernesto Aragón Gil

    Rubén Ernesto Aragón Gil

    studenthace 2 años

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

    Ricardo Mazuera

    Ricardo Mazuera

    studenthace 3 años

    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.

    Gustavo Gonzalez Montero

    Gustavo Gonzalez Montero

    studenthace 3 años

    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í: Captura de Pantalla 2021-11-21 a la(s) 23.41.38.png Y aquí: Captura de Pantalla 2021-11-21 a la(s) 23.42.39.png 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.

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.