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

176
Vistas
setState no actualiza correctamente el componente de reacción

Estoy tratando de agregar paginación en React y estoy enviando una consulta, según el número de página de la URL. Los datos deben obtenerse y actualizarse en el mismo componente.

Pero el problema ocurre cuando paso de la página 2 a la página 3. Los datos de la página 2 y de la página 3 se muestran alternativamente durante un tiempo.

Ingrese la descripción de la imagen aquí

Después de un tiempo, los datos recién obtenidos se actualizan. Tengo setPost([]) después de hacer clic en la página 3, pero no sé de dónde viene la página 2.

Quiero establecer Cargar en verdadero hasta que los datos recién obtenidos se obtengan por completo.

 const Daily = ({match}) => { const [posts, setPosts] = useState([]); const [numberOfPages, setNumberOfPages] = useState([]); const [loading, setLoading] = useState(true); const perPageItems = 8; useEffect(() => { const totalPost = () => { getPostsCount() .then(data => { setNumberOfPages(Math.ceil(data/perPageItems)) }) } const loadIndexPosts = (a, b) => { getPostsByIndex(a, b) .then(data => { if (data.error) { console.log(data.error); } else { setPosts(data); } setLoading(false); }) }; totalPost() if(match.params.page==undefined) match.params.page=1; var n = parseInt(match.params.page)-1; var startIdx = n*perPageItems; loadIndexPosts(startIdx, perPageItems) },) console.log(posts); return ( <div> <div className="mt-5 daily-card-feed"> {loading && <ThreeDotsWave/>} {posts.map((post, index) => { return ( <div key={index}> <DailyCard post={post}/> </div> ) })} </div> <div className="h4 pb-5 pull-right mr-5"> {match.params.page==1 && <Link to={`/daily/page/2`} onClick={() => {setLoading(true); setPosts([])}}>Older Post -></Link>} {match.params.page!=1 && <Link to={`${parseInt(match.params.page)+1}`} onClick={() => {setLoading(true); setPosts([])}}>Older Post -></Link>} </div> </div> ) }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En primer lugar, averigüemos la lógica de cargar nuevos datos. Cuando llega una nueva página a la ruta, desea llamar a la API. Creo que el problema está aquí:

 useEffect(() => { const totalPost = () => { getPostsCount() .then(data => { setNumberOfPages(Math.ceil(data/perPageItems)) }) } const loadIndexPosts = (a, b) => { getPostsByIndex(a, b) .then(data => { if (data.error) { console.log(data.error); } else { setPosts(data); } setLoading(false); }) }; totalPost() if(match.params.page==undefined) match.params.page=1; var n = parseInt(match.params.page)-1; var startIdx = n*perPageItems; loadIndexPosts(startIdx, perPageItems) },)

Podemos romper esto como:

 const totalPost = () => { getPostsCount() .then(data => { setNumberOfPages(Math.ceil(data/perPageItems)) }) } const loadIndexPosts = (a, b) => { getPostsByIndex(a, b) .then(data => { if (data.error) { console.log(data.error); } else { setPosts(data); } setLoading(false); }) }; useEffect(() => { if(match.params.page==undefined) match.params.page=1; var n = parseInt(match.params.page)-1; var startIdx = n*perPageItems; loadIndexPosts(startIdx, perPageItems) },[numberOfPages])

Esto agregará la dependencia de la llamada cuando cambie el número de página. Y llame a totalPost() solo desde el evento de clic.

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