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

91
Vistas
Problema al mostrar un elemento de acuerdo con la url - Reaccionar

Tengo una pregunta. Tengo un componente que al ingresar a /category/:categoryId se procesa haciendo un efecto en "api url + categoryId". Mi problema es que si cambio de una categoría a otra la página solo cambia si el useEffect se ejecuta infinitamente lo que genera problemas a la vista como se ve a continuación. ¿Cómo puedo hacer que se ejecute una vez y cuando cambio de /category/1 a /category/2 useEffect se ejecuta correctamente?

 const Categories = () => { let [producto, productos] = useState([]); const { categoryId } = useParams(); useEffect(() => { fetch('https://fakestoreapi.com/products/category/' + categoryId) .then(res=>res.json()) .then(data=>productos(data)) },[]); console.log(producto) return( <div className="container"> {producto.map((p) => ( <Producto title={p.title} price={p.price} description={p.description} image={p.image} key={p.id} id={p.id} /> ))} </div> ) } export default Categories;

Mi archivo de enrutador:

 <Route path="/category/:categoryId" component={Categories} />

Este es el problema que se genera, llega un momento en que se hace un fetch a una categoría solicitada previamente y luego se ejecuta la nueva categoría solicitada.

ver mi problema en video

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

0

Simplemente puede agregar categoryId al argumento de matriz useEffect . Se llama a la función dentro de useEffect , solo cuando cambia categoryId

 useEffect(() => { fetch('https://fakestoreapi.com/products/category/' + categoryId) .then(res=>res.json()) .then(data=>productos(data)) },[categoryId]);
about 4 years ago · Juan Pablo Isaza Denunciar

0

no puede editar producto directamente, debe usar productos:

 const Categories = () => { let [producto, productos] = useState([]); const { categoryId } = useParams(); useEffect(() => { fetch('https://fakestoreapi.com/products/category/' + categoryId) .then(res=>res.json()) .then(data=>productos(data)) },[]); console.log(producto) return( <div className="container"> {producto && producto.map((p) => ( <Producto title={p.title} price={p.price} description={p.description} image={p.image} key={p.id} id={p.id} /> ))} </div> ) } export default Categories;
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