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

82
Vistas
la matriz no se renderizará en el cambio de estado de React

Tengo este gancho useState:

 const [products, setProducts] = useState([])

y tengo estas funciones:

 const sortByLow =()=>{ const newArray = products.sort((a,b)=>b.price-a.price) setProducts(newArray) console.log(newArray); } const sortByHigh =()=>{ const newArray = products.sort((a,b)=>a.price-b.price) setProducts(newArray) console.log(newArray); }

un gancho useEffect:

 useEffect(()=>{ const displayProducts = async()=>{ try { //fetch from server at port 3000 const response = await fetch('http://localhost:3000/') if(!response.ok){ throw new Error("displayProducts response is not ok") } const responseDataObject = await response.json() const allProducts = responseDataObject.data.allProducts setProducts(allProducts); } catch (error) { console.log("theres an error" + error); } } //call the function, duh displayProducts(); }, [])

y el valor de retorno del componente es este:

 <div> {products.filter( product => {return (product.price > lowPrice && product.price < highPrice)} ).map(productObj => <ProductComponent navigateToProduct = {productObj._id} navigateToCategory = {productObj.category} key = {productObj._id} name = {productObj.name} category = {productObj.category} price = {productObj.price} description = {productObj.description} image = {productObj.image} />)} </div>

ahora espero que la matriz de productos cambie de acuerdo con las funciones anteriores, pero no sucederá por alguna razón. ¿Cual puede ser el problema? por favor ayúdenme gracias!

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

0

ok, lo descubrí gracias al comentario de @KonradLinkowski... La clasificación solo hace referencia a la matriz original, así que para crear una nueva matriz, debería haber escrito [...products] como la matriz de origen, de la siguiente manera:

 const sortByLow =()=>{ const newArray = [...products].sort((a,b)=>b.price-a.price) setProducts(newArray) console.log(newArray); } const sortByHigh =()=>{ const newArray = [...products].sort((a,b)=>a.price-b.price) setProducts(newArray) console.log(newArray); }

¡Gracias a todos los que leyeron y ayudaron!

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cuando ordena una matriz, no crea una nueva ID de referencia, por lo que no sabe actualizar el estado. Así es como puedes forzarlo a hacer una nueva referencia.

 const sortByLow = () => { const newArray = [...products]; newArray.sort((a, b) => b.price - a.price); setProducts(newArray); console.log(newArray); }; const sortByHigh = () => { const newArray = [...products]; newArray.sort((a, b) => a.price - b.price); setProducts(newArray); console.log(newArray); };

Esto debería actualizar el estado de reacción.

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