Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

101
Vistas
¿Cómo puedo hacer coincidir los datos de un objeto y pasarlos como accesorios a otro componente que se muestra dinámicamente?

Estoy almacenando mis datos en una matriz JS. Después de eso, estoy usando la función de mapa para mostrar componentes con datos específicos. Hasta entonces, todo funciona. Después de hacer clic en el componente, quiero mostrar un componente PopUp que muestre datos más específicos del archivo data.js. ¿Cómo puedo pasarlo como accesorios y hacer coincidir los datos correctos con el componente correcto? En este momento, después de hacer clic, siempre me muestra el mismo texto.

Mi archivo data.js:

 export const data = { projects: [ { name: "Project1", image: require("../assets/img/Project1.PNG"), description: "Set number 1", technologies: "REACT", link: "github.com", }, { name: "Project2", image: require("../assets/img/Project2.PNG"), description: "Project number 2 - description", technologies: "C#", link: "github.com", },

Este es mi PopUp.js que debería mostrar datos más específicos:

 function Popup({ project, description }) { return ( <Wrapper> <p>Project name is: {project}</p> <p>Description is: {description}</p> </Wrapper> ); }

Y aquí mapeo mis datos y aquí está el problema. ¿Cómo puedo pasarlo?

 function Projects() { const [isOpen, setIsOpen] = useState(false); const togglePopup = () => { setIsOpen(!isOpen); }; return ( <Wrapper> {data.projects.map((proj) => ( <ProjectContainer background={proj.image} onClick={togglePopup}> {isOpen && ( <Popup project={proj.name} description={proj.description} /> )} </ProjectContainer> ))} </Wrapper> ); }

Realmente gracias por todas las respuestas!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede usar índice en lugar de booleano:

 function Projects() { const [isOpen, setIsOpen] = useState('nothing'); return ( <Wrapper> {data.projects.map((proj, index) => ( <ProjectContainer background={proj.image} onClick={()=>setIsOpen(oldIndex => index === isOpen ? 'nothing' : index)}> {isOpen === index && ( <Popup project={proj.name} description={proj.description} /> )} </ProjectContainer> ))} </Wrapper> ); }

El estado almacena el índice de la ventana emergente abierta actual.

El evento ProjectContainer onClick verifica si el índice actual es el mismo que el suyo y cambia en consecuencia: a 'nada' si están abiertos actualmente, a su índice si no lo están.

La condición {isOpen === index && ( se usa para mostrar solo la ventana emergente abierta actualmente, es decir, el índice actual.

De esta manera, puede alternar un proyecto individual y no todos.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda