3

直到几天前,我的 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/

(检查 Inspector 中的 Network 选项卡以查看所有图像都是从初始加载请求的)

这里还有一个视频

知道我做错了什么吗?

Thanks in advance, Morten

4

1 回答 1

5

我遇到了与 npm 包类似的问题react-lazyload。一方面,这个包每个 LazyLoad 组件只允许一个子组件,因此您必须重新排列层次结构才能使其工作。其次,在加载已经在视口中设置的图像时,我发现了一些奇怪的行为。该文档确实列出了import {forceCheck} from 'react-lazyload';结合forceCheck();作为手动检查元素的方法,但我发现这对于不重新渲染的组件来说不方便且不足。

我能够从替代包中通过更简单的实现获得完全相同的功能react-lazy-load。注意连字符。这个包还需要node>0.14。或多或少,它做同样的事情。你可以在这里阅读他们的文档:react-lazy-load

于 2020-07-10T18:50:16.940 回答