Как реализовать отображение прелоадера до полной загрузки страницы?

Как дождаться загрузки данных из API и показать preloader в React, пока данные не загружены из API? Возникает ошибка при первой загрузке, поскольку localStorage не содержит этих объектов. Ищу совет или ответ.
  • 7 декабря 2023 г. 16:09
Ответы на вопрос 2
В React можно реализовать показ прелоадера до полной загрузки страницы с использованием состояния компонента.

Вариант реализации может выглядеть следующим образом:

1. Создайте состояние в компоненте для отслеживания загрузки данных и отображения прелоадера.

```jsx
import React, { useState, useEffect } from 'react';

const MyComponent = () => {
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    // Выполните асинхронный запрос к API
    // Установите состояние загрузки на false после получения данных
    fetchData().then(() => setLoading(false));
  }, []);

  const fetchData = async () => {
    // Здесь можно выполнить запрос к API, используя fetch или другой метод
    // Дождитесь получения данных и сохраните их в состояние или localStorage
  };

  return (
    <div>
      {loading ? (
        <div>Загрузка...</div>
      ) : (
        <div>Содержимое страницы</div>
      )}
    </div>
  );
};

export default MyComponent;
```

2. Во время загрузки данных установите состояние загрузки на `true`. После получения данных установите состояние загрузки на `false`.

3. Выводите разметку прелоадера, если состояние загрузки равно `true`, иначе выводите содержимое страницы.

4. В этом примере используется хук `useEffect` для выполнения запроса к API при монтировании компонента (пустой массив зависимостей `[]` указывает, что хук должен выполниться только один раз при монтировании).

5. В функции `fetchData` можно использовать методы для выполнения запроса к API, такие как `fetch` или сторонние библиотеки, например `axios`. Дождитесь получения данных и сохраните их в состояние или `localStorage`, если это необходимо.

6. При первой загрузке страницы можно получить ошибку, поскольку `localStorage` может быть пустым. Для этого решения необходимо добавить обработку ошибок и установить значение состояния загрузки на `false`, если произошла ошибка при получении данных.

```jsx
const fetchData = async () => {
  try {
    // Здесь можно выполнить запрос к API, используя fetch или другой метод
    // Дождитесь получения данных и сохраните их в состояние или localStorage
  } catch (error) {
    console.log(error);
    setLoading(false);
  }
};
```

Это основной паттерн для реализации показа прелоадера до полной загрузки данных в React. Вы можете настроить прелоадер по своему усмотрению, добавив стили и дополнительную разметку.
Данная проблема решается состояниями isLoading, isError, isSuccess (последнее в принципе вычисляемое). Есть как ряд библиотек, которые это все поставляют (RTK Query, например), но и можно самому это все дописать к axios, но с большой вероятностью придется писать много повторяющегося кода. Это можно поправить кастомным хуком который даст все состояния за один вызов.
Похожие вопросы