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

151
Vistas
Obtenga datos de la API, almacénelos en el estado y luego empalme los datos en un nuevo estado - Reaccionar

Estoy tratando de obtener datos de una API y almacenarlos en setData(response.data) . Luego estoy tratando de empalmar esos datos en un nuevo estado llamado elementos. Así que hago setItems(data.events?.splice(lastPage, firstPage));

De alguna manera, mi matriz de elementos inicialmente siempre está vacía, necesito actualizar el sitio para obtener la información. Estoy usando un estado de carga para eso, pero por alguna razón mis elementos no actualizan su estado. este es el codigo

 const [data, setData] = useState([]); const [isLoading, setIsLoading] = useState(true); const [items, setItems] = useState([]); const [page, setPage] = useState(1); const EVENTS_PER_PAGE = 10; const firstPage = page * EVENTS_PER_PAGE; const lastPage = firstPage - EVENTS_PER_PAGE; useEffect(() => { getEvents() .then(function (response) { setData(response.data); setItems(data.events?.splice(lastPage, firstPage)); }) .catch(function (error) { setError(error); }) .finally(function (response) { setIsLoading(false); }); }, []);

JSON: https://www.mockachino.com/c31972ec-27f7-45/events

Intenté todo pero no puedo hacer que funcione, cualquier ayuda es apreciable

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

0

Cuando intenta poner datos en estado, no puede acceder a su nuevo valor en el mismo useEffect.

Lo que puedes hacer es:

  1. Primero useEffect solo obtiene datos y los pone en estado;
  2. Second useEffect (necesita crearlo) cambia el estado de sus artículos
 useEffect(() => { getEvents() .then(function (response) { setData(response.data); }) .catch(function (error) { setError(error); }) .finally(function (response) { setIsLoading(false); }); }, []);
 useEffect(() => { setItems(data.events?.splice(lastPage, firstPage)); }, [data, lastPage, firstPage])

El segundo efecto de uso se activará cuando cambie la matriz [data] .

about 4 years ago · Juan Pablo Isaza Denunciar

0

1=> no mostrar la página hasta que isLoading sea falso, algo así como

 return isLoading ? ( <> spinner or some else < /> ) : ( <> your page </>

de esa manera, su página no se procesará hasta que se carguen los datos.

2 => también intente agregar la variable isLoading a la matriz de dependencia para que la página se vuelva a mostrar cuando cambie isLoading

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