Компонент отложенной загрузки, заполненный graphQL - PullRequest
0 голосов
/ 13 июля 2020

У меня есть компонент карточек, который я использую на своей индексной странице, который берет данные из запроса graphQL, например:

data.allStrapiArticle.nodes.map(article => {
            return (
              <Card
                id={article.id}
                title={article.title}
                category={article.categories}
                author={article.author.name}
                content={article.content}
                imgUrl={article.cover.publicURL}
                date={article.created_at}
                slug={article.slug}
              />
            )
          })

, однако это загрузит все карточки статей. Я хочу сначала загрузить только 3 карты, а когда пользователь прокручивает третью, он загружает еще 3, пока не достигнет максимума 12.

Как я могу это сделать? Я пробовал использовать наблюдатель пересечения с vanilla js, но это не сработало:

let numberToLoad = 3
   function loadCards() {
    numberToLoad += 3
    data.allStrapiArticle.nodes.slice(0, numberToLoad).map(article => {
      return (
        <Card
          id={article.id}
          title={article.title}
          category={article.categories}
          author={article.author.name}
          content={article.content}
          imgUrl={article.cover.publicURL}
          date={article.created_at}
          slug={article.slug}
        />
      )
    })
  }
  let observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        loadCards()
        observer.unobserve(entry.target)
      }
    })
  })
  document.querySelectorAll(".card").forEach(card => {
    observer.observe(card)
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...