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

168
Vistas
Mostrar el contenido de la matriz cada vez que hay un elemento en la matriz que no funciona correctamente en mi Proyecto React

En este mi proyecto, quiero que los valores marcados se muestren delante de los filtrados aplicados, pero esto no funciona como se esperaba. Cada vez que se marca una casilla, muestra todo el valor marcado y cada vez que se desmarca una casilla, desaparece automáticamente. ¿Alguien puede ayudarme a verificar qué estoy haciendo mal? codigosandbox

Mi código App.js

 import React from "react"; import "./styles.css"; import { useState, useEffect } from "react"; export default function App() { const [isselected, setisselected] = useState([]); const OnChange = (e) => { console.log(e.target.checked); const ischecked = e.target.checked; if (ischecked) { setisselected([...isselected, e.target.value]); } else { const index = isselected.indexOf(e.target.value); isselected.splice(index, 1); setisselected(isselected); } console.log(isselected); }; useEffect(() => { console.log(isselected, "value selected"); }, [isselected]); return ( <div className="App"> <span> Filters applied:{" "} {isselected.map((i) => ( <span>{i}</span> ))} </span> <div className="first-search"> <input type="checkbox" className="input-1" value="Lastsevendays" name="last_seven" id="1" onChange={OnChange} /> <label htmlFor="">Last 7 days</label> </div> <div className="first-search"> <input type="checkbox" className="input-1" name="last24" value="last_24" id="2" onChange={OnChange} /> <label htmlFor="">Last 24 hours</label> </div> </div> ); }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Tema

Está isselected el estado seleccionado al eliminar filtros. Array.prototype.splice muta la matriz en el lugar.

 const OnChange = (e) => { const ischecked = e.target.checked; if (ischecked) { setisselected([...isselected, e.target.value]); } else { const index = isselected.indexOf(e.target.value); isselected.splice(index, 1); // <-- mutation!! setisselected(isselected); // <-- same array reference } };

Solución

Utilice Array.prototype.filter para filtrar por índice la isselected y devolver una nueva referencia de matriz.

 const OnChange = (e) => { const ischecked = e.target.checked; if (ischecked) { setisselected([...isselected, e.target.value]); } else { const index = isselected.indexOf(e.target.value); setisselected((isselected) => isselected.filter((_, i) => i !== index)); } };

Dado que la isselected está almacenando primitivas, también puede filtrar directamente por el valor del filtro.

 setisselected((isselected) => isselected.filter((val) => val !== e.target.value) );

Edite mostrar-el-contenido-de-la-matriz-siempre-que-hay-un-elemento-en-la-matriz-que-no-funciona-correctamentei

about 4 years ago · Juan Pablo Isaza Denunciar

0

lo que está haciendo es mostrar el estado con console.log() y es la naturaleza de console.log() que muestra el valor anterior del estado, y también hice algunos cambios en su función Onchange y es trabajando ahora intente esto y luego hágame saber si está funcionando o no:

 const OnChange = (e) => { console.log(e.target.checked); const ischecked = e.target.checked; if (ischecked) { setisselected([...isselected, e.target.value]); } else { let temp = [isselected]; const index = temp.indexOf(e.target.value); temp.splice(index, 1); setisselected(temp); } console.log(isselected); };
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