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

273
Vistas
¿Cómo obtengo acceso a un solo elemento del método de mapa en reaccionar js?

Mi pregunta puede no ser clara, pero aquí está mi problema. Aquí está mi tarjeta que obtuve de una matriz usando el método de mapa y muestro cada elemento en cada tarjeta. Y activé el botón "Editar" para que muestre el texto oculto (quiero ver esto en una sola tarjeta). Pero cuando hago clic en una sola tarjeta, todas las tarjetas muestran ese mensaje oculto. ¿Podrías ayudarme?

Quiero ver el texto "Quiero ver esto en una sola tarjeta" en esa tarjeta donde se hace clic en el botón Editar

Aquí están mis códigos:

 const [edit, setedit]= useState(false) <Grid container spacing={5} className="main-grid" > {allitems.map((oneitem, index) => { return ( <Grid item key={index} md={3} className="itemGrid" > <Card className="card"> <CardContent> <Typography className="" color="textSecondary" gutterBottom> {oneitem.title} </Typography>/ <p variant="h5" component="h2" className="description"> {oneitem.description} </p> <p className="" color="textSecondary"> Created At: {oneitem.createdAt} </p> <Button size="small" onClick={()=> deleted(oneitem._id)} >Delete</Button> <Button size="small" onClick={()=>setedit(!edit)} >Edit</Button> <-here is the problem {edit && <h1>Want to see this in only one card</h1>} </CardContent>

aquí está la imagen

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Tema

Está utilizando un único valor de estado de edit booleano para activar el modo de edición de todos los elementos asignados.

Solución

Use algún estado de edit que pueda correlacionar con sus datos, como el índice o una propiedad de id de elemento. Como no veo ningún GUID utilizado, haré una demostración con index.

  1. Use el índice de elementos para identificar qué está en modo "editar", nulo significa que nada tiene el modo "editar".

     const [editIndex, setEditIndex]= useState(null);
  2. Actualice el botón de alternancia para alternar un nuevo índice o volver a nulo si se hace clic en el mismo botón

     <Button size="small" onClick={() => setEditIndex(editIndex => editIndex === index ? null : index)} > Edit </Button>
  3. Haga coincidir el estado editIndex guardado con el elemento asignado actualmente para representar condicionalmente el mensaje.

     {editIndex === index && <h1>Want to see this in only one card</h1>}

Nota adicional

Veo que tienes un botón de borrar:

 <Button size="small" onClick={()=> deleted(oneitem._id)} >Delete</Button>

Si está eliminando elementos de los datos subyacentes, querrá no usar el índice de matriz como la clave React. En su lugar, debe usar una propiedad de identificación única, como _id , de cada elemento ( solo necesitan ser únicos entre hermanos ). Entonces, en lugar de usar el índice para establecer el modo de "edición", usaría _id en su lugar.

over 4 years ago · Santiago Trujillo Denunciar

0

Este problema surge porque está utilizando un valor de edición común en todo el mapa. Entonces, si cambia el valor principal de "editar" a "verdadero" (como en este caso), considerará la edición como verdadera para todas las tarjetas.

No, esto es lo que puede intentar hacer (estoy considerando que puede editar solo una tarjeta a la vez) en lugar de mantener la edición como un valor booleano (verdadero | falso) utilícelo como un valor entero para almacenar el índice de la tarjeta en tu matriz.

Pasos :

  1. Por defecto mantener edit = null
  2. la función setEdit puede convertirse en algo como esto: (considerando el estado basado en la clase)

 setEdit(editVal) => { if(this.state.edit === editVal){ this.setState({ edit: null }) } else{ this.setState({ edit: editVal } } }

  1. y mientras llama al método setEdit, llámelo así:

onClick={()=> setEdit(index)}

  1. Ahora, cada vez que hace clic en el botón de edición, el valor de edición cambia a un nuevo valor de índice o a un valor nulo.

  2. Un último cambio es reemplazar esto:

{edit && <h1>Want to see this in only one card</h1>}

con este

{edit===index && <h1>Want to see this in only one card</h1>}

Concluyendo:

Primero movimos el valor de edición a Entero o nulo. Luego, al hacer clic en editar, el valor de índice del elemento en la matriz se asigna a "editar". una vez que esto sucede, estamos verificando si el valor de edición es igual al valor del índice (paso 5), si es así, muestra el mensaje solo para esa tarjeta. Una vez que haga clic en editar nuevamente, el valor de "editar" se vuelve nulo (si se hace clic en la misma tarjeta).

over 4 years ago · Santiago Trujillo 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