Задать вопрос
@BelkinVadim
Frontend разработчик

Правильно ли реализовал прелоадер?

Кода к сожалению сейчас нет под рукой, постараюсь на словах описать подробнее.
Есть компонент Каталог с пагинацией. Данные для него берутся из хранилища. Каталог подписан на событие изменения в его хранилище и вызывает .setState() с новыми данными из хранилища.
При рендере Каталога идет проверка, если его state пустое, то рендерится прелоадер, если нет - контент.
При переходе по пагинации вызывается экшн загрузки данных новой страницы каталога: сперва очищается хранилище и срабатывает событие его изменения, а затем аяксом загружаются данные новой страницы в хранилище и при завершение загрузки снова срабатывает событие изменения хранилища. Получается, что при очищение хранилища Каталог рендерит прелоадер и по загрузке меняет его на контент.
Так же подобный метод вывода прелоадера использую в других компонентах (у каждого свое хранилище). Тем самым на странице может быть выведено несколько компонентов со своими прелоадерами.
Правильно ли выбран подход для показа прелоадера на время загрузки данных через сброс хранилища и state компонента соответственно? Или данная реализация не совсем правильная?
  • Вопрос задан
  • 856 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
idelg
@idelg
Разработчик
Кажется, на сайдэффекты полагаешься. Если товаров нет или сервер вернул ошибку, то стэйт останется пустым и пользователь бесконечно долго будет смотреть на прелоадер.

Прелоадер показывается только в одном конкретном случае: запрос на сервер ушёл и ещё не вернулся.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽