Gimir
@Gimir
JavaScript dev

Как изменять стейт 1 раз при прокрутке в конец страницы?

const updateContent = throttle(() => {
    let updated = false;
    if ((window.scrollY + window.innerHeight) === document.body.clientHeight) {
      window.scrollTo({top: 0, behavior: 'instant'});
      setCurrentPage(prevPage => {
        console.log('UPDATED!!!');
        return prevPage+1;
      });
    };
  }, 1000);
//--------------------
window.addEventListener('scroll', updateContent);


Задача сделать что-то наподобие пагинации, но не переходить на следующую страницу а обновлять уже существующий контент.
Я написал такую функцию, которая при скролле в конец страницы по идее должна обновить стейт (хук useState) 1 раз, и прокрутить в начало страницы. На деле стейт обновляется несколько раз. Как сделать так чтобы это работало как надо? Может есть какие-то best practices?
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
mrhard
@mrhard
web разработчик
Введите переменную для определения статуса загрузки

var is_loading_page = false;

// в обработчике скролинга
if (is_loading_page) return false;
is_loading_page = true;

// в калбеке получения новой страницы (через AJAX например)
is_loading_page = false;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MamaLuyba
скорее всего так происходит потому, что event реагирует на прокрутку колесика и, соответственно, т.к. несколько прокруток будут иметь одинаковые значения высоты окна - функция и отработает несколько раз. но это не точно.
можно попробовать удалять eventListener после первого срабатывания, а при скролле в начало страницы - вновь добавлять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект