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

164
Visualizações
Agregar estado de carga a la función de mapa hace que los elementos se muestren como cargando

Tengo una función de mapa que muestra elementos:

 {data.map((item, index) => ())}

Dentro de esta función, me gustaría tener un onClick que muestre condicionalmente un estado de carga cuando la carga sea verdadera.

 const [loading, setLoading] = useState(false) {data.map((item, index) => ( <span onClick={() => handleDelete()}> {loading ? ( <LoadingSpinner /> ) : ( <TrashIcon />)} </span> ))}

Cuando hago esto, hace que todos los elementos de la lista muestren el estado de carga, no solo el elemento en el que se hizo clic.

¿Hay alguna manera de lograr esto usando el índice?

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

0

Todos los elementos de su mapa están escuchando un solo valor de estado booleano; en cambio, puede realizar un seguimiento del índice del elemento en el que se hizo clic o, si desea poder hacer clic y mostrar el estado de carga de varios elementos, puede usar una matriz o Establecer.

A continuación se muestra un enfoque utilizando Set

 const [loadingIndices, setLoadingIndices] = useState(new Set());
 {data.map((item, index) => ( <span onClick={() => handleDelete(index)}> {loadingIndices.has(index) ? ( <LoadingSpinner /> ) : ( <TrashIcon />)} </span> ))}

Ahora, en su función handleDelete, puede agregar el índice del elemento en el que se hizo clic al estado establecido.

 handleDelete = (selectedIndex) => { setLoadingIndices((prev) => new Set([...prev, selectedIndex])); // ... // ... // And to remove the element from loading state setLoadingIndices((prev) => { const updated = new Set(prev); updated.delete(selectedIndex); return updated; }); };
about 4 years ago · Juan Pablo Isaza Relatório

0

Debe mover su estado a los elementos en lugar del padre. Actualizar el estado dentro del componente principal hará que todos los elementos secundarios se vuelvan a renderizar.

 const childComponent = (props) => { // you can pass the main loading state as a starting point const [loading,setLoading] = useState(props.loading) // initial loader state if(loading) return <LoadingSpinner /> return ( <button onClick={()=> setLoading(prev => !prev)} /> )}

luego puede cambiar esto para mostrar diferentes elementos usando declaraciones if como las anteriores.

about 4 years ago · Juan Pablo Isaza Relatório

0

Si no le importa volver a renderizar los niños, puede usar esta lógica de índice.

 const [loading, setLoading] = useState(null); const handleDelete = (index) => { setLoading(index); } {data.map((item, index) => ( <span onClick={() => handleDelete(index)}> {loading === index ? ( <LoadingSpinner /> ) : ( <TrashIcon />)} </span> ))}
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