Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

302
Visualizações
Reaccionar: ¿Cómo solo represento un componente en la página una vez que hago clic en él desde una matriz asignada?

Tengo una cuadrícula de componentes representados en una página usando la función de mapa y solo quiero representar el componente con todos sus detalles una vez que hago clic en él y solo obtengo un error que dice:

TypeError no capturado: no se pueden leer las propiedades de undefined (leyendo 'logo')

Soy nuevo en React y no puedo entender por qué sucede esto.

¡Alguna ayuda sería muy apreciada!

Aquí está mi código:

Componente del cuerpo - (componente principal)

 import { useState } from "react"; import CompanyList from "./CompanyList"; import Company from "./Company"; const Body = ({ companies }) => { const [viewCompany, setViewCompany] = useState(false); const showCompanyHandler = (company) => { console.log("Clicked on company card"); setViewCompany(true); }; return ( <div className="appBody"> <CompanyList companies={companies} showCompanyHandler={showCompanyHandler} /> {viewCompany && <Company />} </div> ); }; export default Body;

Componente CompanyList (hijo de Body)

 import Company from "./Company"; const CompanyList = ({ companies, showCompanyHandler }) => { return ( <div className="companyList"> {companies.map((company) => ( <Company key={company.id} company={company} showCompanyHandler={showCompanyHandler} /> ))} </div> ); }; export default CompanyList;

Componente de empresa (hijo de CompanyList) - Componente que quiero mostrar en la página

 const Company = ({ company, showCompanyHandler }) => { return ( <div className="company" onClick={(company) => showCompanyHandler(company)}> {console.log(company)} <img src={company.logo} alt="logo" /> <h1>{company.name}</h1> <p>{company.companyDescription}</p> </div> ); }; export default Company;

No estoy seguro de lo que me estoy perdiendo aquí...

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Si el componente CompanyList funciona bien, una forma fácil de hacerlo sería usar una función para generar dinámicamente la lista en lugar de tener una referencia directa al componente.

 import { useState } from "react"; import CompanyList from "./CompanyList"; import Company from "./Company"; const Body = ({ companies }) => { const [viewCompany, setViewCompany] = useState(false); const showCompanyHandler = () => { console.log("Clicked on company card"); setViewCompany(true); }; // I removed the showCompanyHandler attribute and // added an onClick to CompanyListContainer, instead. const generateCompanyList = (companies) => { if (viewCompany === false) return null; return <CompanyList companies={companies} /> ) } return ( <div className="appBody"> <CompanyListContainer onClick={showCompanyHandler}> {generateCompanyList} </CompanyList> </div> ); }; export default Body;

Si generarCompanyList es nulo, lamentablemente no debería haber nada en lo que hacer clic. Por lo tanto, puede agregarle algunos estilos al div para un ancho/alto mínimo, o puede mover eso onClick a su componente appBody.

about 4 years ago · Juan Pablo Isaza Relatório

0

Si entendí correctamente, la estructura de su código está rota y necesita refactorizarla para implementar el tipo de lógica que está buscando.

En primer lugar, le sugiero que elimine este {viewCompany && <Company />} , viewCompany y showCompanyHandler de su componente Body.

Dado que el componente Company siempre estará visible, en mi opinión, debería ser responsable de manejar esta lógica de "expansión" que está tratando de implementar, algo como:

 const Company = ({ company }) => { const [showDetails, setShowDetails] = useState(false); const toggleShowDetails = () => setShowDetails(!showDetails); return ( <div className="company" onClick={toggleShowDetails}> {showDetails && <> <img src={company.logo} alt="logo" /> <h1>{company.name}</h1> <p>{company.companyDescription}</p> </> } </div> ); }; export default Company;

Como puede ver, con esta implementación ya no tiene que pasar showCompanyHandler al componente Company y puede eliminar toda esta lógica del componente Body.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda