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

96
Views
Actualizaciones de React State demasiado tarde

Intento generar una lista con productos, pero desafortunadamente la lista se actualiza demasiado tarde. La lista de productos está vacía. Cuando lo ejecuto por segunda vez funciona. ¿Hay alguna solución?

¡Muchos gracias!

 export const Products = (props) => { const [products, setProducts] = useState([]); const [ListProducts, setListProducts] = useState([]); const [List, setList] = useState([]); const loadProducts = async (categorieid) => { const apiProducts = await axios.get(`${url}/products/${categorieid}`); setProducts(apiProducts.data.body); }; const mapData = async () => { if (products && products.length) { products.map((product) => ListProducts.push( <ProductCard product={product} key={product.id} /> ) ); setListProducts(ListProducts); } else { List.push( <div className="column"> <span className="title has-text-grey-light"> No products found! </span> </div> ); } const renderListProducts = () => { return <div className="container">{ListProducts}</div>; }; const writeCategory = async (kategorieId) => { await loadProducts(kategorieId); await mapData(); await renderListProducts(); }; }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

tu error esta aqui

 const writeCategory = async (kategorieId) => { await loadProducts(kategorieId); await mapData(); await renderListProducts(); };

setProducts se llama al final de loadProducts , pero no es necesario actualizar el estado antes de que se llame a mapData . La solución es usar useEffect como disparador para la siguiente función.

 const writeCategory = async (kategorieId) => { loadProducts(kategorieId); }; useEffect(() => { products.length && mapData(), [products.length] }

y así sucesivamente para la tercera función renderListProducts

Por cierto en

 products.map((product) => ListProducts.push( <ProductCard product={product} key={product.id} /> ) )

está modificando el estado de ListProducts fuera de setState , considere hacer algo como

 const temp = products.map((product) => <ProductCard product={product} key={product.id} /> ) setListProducts(temp)

en cambio

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!