Компонент бесконечной прокрутки Reactjs всегда отображает новые данные

После прокрутки мои данные всегда отображаются на странице 2, а страница 1 исчезла, и items.concat не работает.

Получить код данных:

const FetchUrl = async (p) =>{
    const Url = await fetch(`api-link=${p}`);
    const data = await Url.json();
    setItem(data.DataNonProject.data)
}

Код для получения дополнительных данных:

const fetchMoreData = () => {
    setTimeout(() => {
        setPage(page + 1);
        console.info(page);
        FetchUrl(page);
        setItem(items.concat(Array.from(items)));
    }, 100);
    // FetchUrl(page);
 }

Возвращаемые данные:

{items ? 
    <InfiniteScroll
      dataLength = {items.length}
      next = {fetchMoreData}
      hasMore = {true}
      loader = {<h4>Loading...</h4>}
    >
     {console.info(items)}   
        { items.map((item, index) => (
            <div key = {index}>
                div {index} - # {item.title}
                <br/><br/><br/>
            </div>
        ))}
    </InfiniteScroll>
    : '' }

Я использую react-infinite-scroll-component

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
const FetchUrl = async (p) =>{
  const Url = await fetch(`https://softkomik.site/api/komik-list?page=${p}`);
  const data = await Url.json();
  setItem(prev => [...prev, ...data.DataNonProject.data])
}
const fetchMoreData = () => {
    setTimeout(() => {
        setPage(page + 1); // At this point, page state will not be changed because setPage is async function
        FetchUrl(page + 1);
    }, 100);
 }

у меня ошибка TypeError: Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.. любое решение?

hikari kun 26.12.2020 11:25
setItem(prev => [...prev, ...data.DataNonProject.data]);
hikari kun 26.12.2020 11:43

какой тип item? также тип data.DataNonProject.data?

baymax 26.12.2020 11:44

элемент useState const [items, setItem] = useState();

hikari kun 26.12.2020 11:46

изменить на const [items, setItem] = useState([]);

baymax 26.12.2020 11:59

Другие вопросы по теме