Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

152
Visualizações
Detener la función que se llama varias veces al desplazarse

Estoy usando el desplazamiento infinito en mi aplicación reaccionar/redux y cuando el usuario se acerca al final de la página, se cargarán más contenidos.

Pero si el usuario se desplaza demasiado rápido y sigue desplazándose mientras se obtiene el contenido del servidor, la función responsable del efecto de desplazamiento se activa varias veces y la API obtiene el mismo contenido, y esto provoca errores porque se mostrarán los mismos elementos con claves idénticas. cargado.

 const [isFetching, setIsFetching] = useState(false); // Fire Upon Reaching the Bottom of the Page const handleScroll = () => { if ( window.innerHeight + Math.max( window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop ) > document.documentElement.offsetHeight - 100 ) { setIsFetching(true); } else { return; } }; // Debounce the Scroll Event Function and Cancel it When Called const debounceHandleScroll = debounce(handleScroll, 500); useEffect(() => { window.addEventListener("scroll", debounceHandleScroll); return () => window.removeEventListener("scroll", debounceHandleScroll); }, [debounceHandleScroll]); debounceHandleScroll.cancel(); // Get More Posts const loadMoreItems = useCallback(() => { dispatch(getMorePosts(moreApiAddress)); setIsFetching(false); }, [dispatch, moreApiAddress]); useEffect(() => { if (!isFetching) return; loadMoreItems(); }, [isFetching, loadMoreItems]);

Así es como se llama al envío si el usuario continúa desplazándose por la parte inferior de la página antes de que se obtenga el contenido anterior:

ingrese la descripción de la imagen aquí

También puede ver el problema en la aplicación en vivo: https://reddix.netlify.app/

¿Hay alguna forma de detener esa función para que se active varias veces cuando se obtiene contenido nuevo y/o el usuario se desplaza demasiado rápido?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Su función handleScroll actualiza el estado, lo que provoca que el componente se vuelva a procesar.

Eso significa que tendrá una nueva instancia de handleScroll (y debounceHandleScroll) en cada renderizado.

Dado que tiene debounceHandleScroll en la matriz de dependencia useEffect , y cambia en cada procesamiento, obtiene una especie de "bucle sin fin".

Intente usar useCallback para memorizar funciones o reescribir el componente e intente mover estas funciones fuera del componente.

Me refiero a algo así:

 const handleScroll = useCallback(() => { if ( window.innerHeight + Math.max( window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop ) > document.documentElement.offsetHeight - 100 ) { setIsFetching(true); } else { return; } }, []); // Debounce the Scroll Event Function and Cancel it When Called const debounceHandleScroll = useCallback(() => debounce(handleScroll, 500), [handleScroll]);

Lea más sobre useCallback : https://reactjs.org/docs/hooks-reference.html#usecallback

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda