Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

147
Views
¿Por qué useEffect causando un renderizado infinito?

Tengo un componente Rooms que quiero volver a renderizar cuando cambie la configuración de filtrado de la habitación. El gancho useEffect para el mismo es:

 useEffect(()=>{ var items1=items.filter((item)=>{ if(item.fields.price<=price) return item; }) var items2=items1.filter((item)=>{ if(item.fields.breakfast==breakfast) return item; }) var items3=items2.filter((item)=>{ if(item.fields.pets==petsAllowed) return item; }) var items4=items3.filter((item)=>{ if(item.fields.capacity<=capacity) return item; }) filteredRooms=items4; if(items4.length!=items.length) setFilteredRooms(items4); })

No he agregado filteredRooms como una dependencia, pero aún así causa una repetición infinita.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Al usar useEffect sin una matriz de dependencias, se ejecutará cada vez que cambie algún estado. Y su comparación de matrices if(items4!=items) siempre devuelve true . Así que el estado siempre está actualizado. Esto genera el bucle.

Prueba algo como:

 useEffect(()=>{ var items1=items.filter((item)=>{ if(item.fields.price<=price) return item; }) var items2=items1.filter((item)=>{ if(item.fields.breakfast==breakfast) return item; }) var items3=items2.filter((item)=>{ if(item.fields.pets==petsAllowed) return item; }) var items4=items3.filter((item)=>{ if(item.fields.capacity<=capacity) return item; }) filteredRooms=items4; if(items4.equals(items)) setFilteredRooms(items4); },[])
about 4 years ago · Juan Pablo Isaza Report

0

Tengo un componente Habitaciones que quiero volver a renderizar cuando cambie la configuración de filtrado de la habitación.

Es probable que no haya una razón para almacenar la matriz filtrada en el estado. En su lugar, debería usar useMemo , pero si items son pequeños, también podría calcular la matriz filtrada directamente en la función de representación.

Además, no es necesario llamar a .filter varias veces, una vez es suficiente.

 const filteredRooms = useMemo( () => items.filter( ({fields}) => fields.price === price && fields.breakfast === breakfast && fields.pets === petsAllowed && fields.capacity <= capacity ), [items, price, breakfast, petsAllowed, capacity] ) // use filteredRooms as needed

Esto actualizará las habitaciones filteredRooms cada vez que cambien los items , price , el breakfast , petsAllowed o la capacity .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!