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

145
Vistas
¿Cómo evitar que las tarjetas de interfaz de usuario de material expandibles se abran al mismo tiempo?

Actualmente tengo dos tarjetas expandibles Material UI y todo funciona como se esperaba menos el hecho de que ambas tarjetas se expanden al mismo tiempo.

Mi archivo de configuración se parece a:

 module.exports = { featuredSection: [ { id: 1, name: 'beer-image-1', title: 'Mango Cart', description: 'A light Wheat Ale bursting with lots of fresh mango flavor and aroma, finishing crisp and refreshing.', malt: '2-row, Wheat', hops: 'Bravo', notes: 'Light, refreshing Wheat Ale with lots of fresh Mango flavor and aroma.', }, { id: 2, name: 'hero-image', title: 'test', description: 'A light Wheat Ale bursting with lots of fresh mango flavor and aroma, finishing crisp and refreshing.', malt: 'test', hops: 'test', notes: 'test', }, ], };

Mi archivo de componente Featured.js se ve así:

 const Featured = ({ featuredSection }) => { const classes = useStyles(); const [expanded, setExpanded] = useState(false); const handleExpandClick = (id) => { setExpanded(!expanded); }; const card = featuredSection.map((item, i) => { return ( <div key={item.id}> <CardWrapper> <Card className={classes.root}> <CardMedia className={classes.media} image={require(`../images/${item.name}.jpg`).default} title={item.title} /> <CardContent> ... </CardContent> <CardActions disableSpacing> <IconButton style={{ color: '#f5f5f5' }} className={clsx(classes.expand, { [classes.expandOpen]: expanded, })} onClick={(id) => handleExpandClick(item.id)} aria-expanded={expanded} aria-label='show more'> <ExpandMoreIcon /> </IconButton> </CardActions> <Collapse in={expanded} timeout='auto' unmountOnExit> ... </Collapse> </Card> </CardWrapper> </div> ); }); return <>{card}</>; }; export default Featured;

Supongo que hay algo que debo cambiar con el estado o hacer coincidir ciertos valores, como la identificación del objeto del archivo de configuración, pero no estoy exactamente seguro de lo que se debe hacer para poder abrir cada tarjeta individualmente. Recreé el problema aquí .

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

0

Tema

Tu corazonada va en la dirección correcta. El problema que tiene es usar el único estado expanded para alternar la expansión de la tarjeta. Cuando cualquier carta cambia al estado único, activa todas las cartas.

Solución

Use un objeto para almacenar el valor alternado por id, y use la id del elemento mapeado actual para verificar el valor.

 const [expanded, setExpanded] = useState({}); const handleExpandClick = (id) => { setExpanded(expanded => ({ ...expanded, [id]: !expanded[id], })); }; ... <Collapse in={expanded[item.id]} timeout="auto" unmountOnExit > ... </Collapse>

Edite cómo evitar que las tarjetas de interfaz de usuario de material expandible se abran al mismo tiempo

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