Почему мой компонент react-lazyload не работает?

Еще несколько дней назад моя реализация LazyLoad работала отлично, но теперь я не могу заставить ее работать.

Это моя составляющая:

import React from 'react';
import LazyLoad from 'react-lazyload';
import './image.scss';

const Image = image => (

  <LazyLoad height={200} offset={100} once>

    <div
    className="image-container"
    orientation={image.orientation}>    

      <img
      className="image"
      src={image.url}
      alt={image.alt}
      />

      {'caption' in image &&
        <div className="meta">
          <p className="caption">{image.caption}</p>
          <p className="order">{image.currentNumber}/{image.maxNumber}</p>
        </div>
      }

    </div>

  </LazyLoad>  
)

export default Image

А в App.js он называется так:

render() {

        return (
            <div className="wrapper">

                <GalleryTop details={this.state.gallery_top} />

                {this.state.images.map((image, index) => <Image key={index} {...image} /> )}
          </div>
        )
    }

Но это не сработает! Вот демонстрационная среда:https://gifted-kare-1c0eba.netlify.com/

(Проверьте вкладку Network в Inspector, чтобы увидеть, что все изображения запрашиваются при начальной загрузке)

Там также видео здесь

Есть идеи о том, что я делаю неправильно?

Заранее спасибо, Мортен

1 ответ

Я столкнулся с аналогичными проблемами с пакетом npm react-lazyload. Во-первых, этот пакет допускает только одного дочернего элемента для каждого компонента LazyLoad, поэтому вам придется изменить иерархию, чтобы заставить ее работать. Во-вторых, я обнаружил странное поведение при загрузке изображений, которые уже были установлены в области просмотра. В документации есть списокimport {forceCheck} from 'react-lazyload'; в сочетании с forceCheck(); как средство ручной проверки элементов, но я счел это неудобным и недостаточным для компонентов, которые не перерисовываются.

Я смог получить те же самые функции с более простой реализацией из альтернативного пакета react-lazy-load. Обратите внимание на дефис. Для этого пакета также требуется узел>0,14. Более или менее, он делает то же самое. Вы можете прочитать их документацию здесь: react-lazy-load

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