react-lazyload

917 阅读2分钟

为什么更好

  • 考虑到性能,所有lazy-loaded组件只有2个事件侦听器
  • 同时支持one-time lazy loadcontinuous lazy load模式
  • scroll/resize事件处理程序被限制,这样您就不会受到频繁更新的影响,您也可以切换到解除触发模式
  • Decorator supported
  • 服务器端呈现友好
  • Thoroughly tested

Installation

2.0.0终于出来了,看看升级指南,升级几乎是无痛的!3.0.0通过使用React ref修复了findDomNode警告,下面是您需要注意的更改

  • 现在我们有了一个额外的div来包装React ref的延迟加载组件
  • 我们可以理解它是一个额外的DOM节点,如果可能的话,我们正在努力优化它
  • 根据使用情况,它可能会破坏UI或快照测试
  • 要定制额外div的样式,请参考这里
  • 如有其他问题,请在这里留言
$ npm install --save react-lazyload

如果您希望默认情况下延迟加载组件,请尝试使用以下便捷的装饰器:

import { lazyload } from 'react-lazyload';

@lazyload({
  height: 200,
  once: true,
  offset: 100
})
class MyComponent extends React.Component {
  render() {
    return <div>this component is lazyloaded by default!</div>;
  }
}

Special Tips

您应该知道,在渲染占位符之前,只有当组件在视口中可见时才会装入它。

因此,您可以在组件的componentDidMount中安全地发送请求,而无需担心性能损失或添加一些漂亮的输入效果,请参阅此演示以了解更多详细信息。

使用方法(v2.6.5)

import React from 'react';
import ReactDOM from 'react-dom';
import LazyLoad from 'react-lazyload';
import MyComponent from './MyComponent';

const App = () => {
  return (
    <div className="list">
      <LazyLoad height={200}>
        <img src="tiger.jpg" /> /*
                                  在第一轮渲染中,如果没有提供占位符,LazyLoad将为您的组件渲染一个占位符,并测量该组件是否可见。height正确设置将使LazyLoad更加精确地计算。该值可以是数字或类似的字符串'100%'。您也可以使用CSS设置占位符的高度,而不要使用height  */
      </LazyLoad>
      <LazyLoad height={200} once >
                                /* 一旦加载了延迟加载的组件,就不再检测滚动/调整大小事件。对于图像或简单组件很有用  */
        <img src="tiger.jpg" />
      </LazyLoad>
      <LazyLoad height={200} offset={100}>
                              /* 假设即使您要预先加载某个组件,即使该组件位于视口下方100像素(用户必须滚动100像素才能看到此组件),也可以将offsetprops 设置为100。另一方面,如果您想延迟加载组件,即使其顶部边缘已经出现在视口中,请将其设置offset为负数 */
        <MyComponent />
      </LazyLoad>
      <LazyLoad>
        <MyComponent />
      </LazyLoad>
    </div>
  );
};