Задать вопрос
@mosikus

Как сделать заглушку до загрузки изображения (onLoad)?

Здравствуйте. На странице нужно использовать 3 разных изображения и сделать для каждой заглушку до загрузки изображения. Способ ниже не работает, а, именно, изображение не отображается, что не так ?
const [isLoading, setLoading] = React.useState(false);
const handleOnLoad = () => {
    setLoading(true);
}

{isLoading === true ? (<img onLoad={handleOnLoad } src="https://i.5sfer.com/post/postImage/thumb-8ipwnn.jpg"/>) : (<div>*Заглушка*</div>)}

*Так*
function App() {
  const [isLoading, setLoading] = React.useState(true);
  const handleOnLoad = () => {
    setLoading(false);
  };

  return (
    <div>
      {isLoading && <div>*Заглушка*</div>}
      <img
        alt="alt"
        onLoad={handleOnLoad}
        src="https://i.5sfer.com/post/postImage/thumb-8ipwnn.jpg"
      />
    </div>
  );
}

работает, но при медленном интернет-соединении заглушка отображается прямо над картинкой, пока она загружается, а я хотел бы отображать заглушку до полной загрузки картинки. Как это сделать ?
  • Вопрос задан
  • 2256 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Merion Academy
    Frontend-разработка на React
    4 месяца
    Далее
  • ProductStar
    React: отточите навыки интерфейсной разработки
    6 недель
    Далее
Решения вопроса 1
@artembatura
1. Проблема конкретно в самой ссылке. По этой ссылке ничего не загружается, потому что ресурс (сайт) не доступен.
2. Нужно обрабатывать кейс, когда картинка не загружается, с помощью onError. Лучше всего будет отображать другую заглушку в этом случае.
3. Можно скрывать картинку стилями, пока она не загрузилась, чтобы твоя заглушка отображалась гарантированно корректно.

Вот пример
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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