JSPM

water-design-recycle

1.0.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q13110F
  • License ISC

基于react库,对在可视区一定范围外的dom进行回收的组件

Package Exports

  • water-design-recycle
  • water-design-recycle/dist/index.min.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (water-design-recycle) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

综述

在可视区上下各一屏区间外的元素将会自动回收,随着滚动亦将会及时自动回显。

使用

import React, { useState } from 'react';
import { createRoot } from 'react-dom/client';
// 可通过以下方法导入
import { Recycle, RecycleItem } from 'water-design-recycle';
// import Recycle from 'water-design-recycle';
// const { RecycleItem } = Recycle;

const getData = (index = 1) => {
  return new Array(index)
    .fill(new Array(10).fill(1).map((node, index) => index))
    .reduce((current, item) => {
      return [...current, ...item];
    }, []);
};

const App: React.FC = () => {
  const [list, setList] = useState<number[]>(getData());

  React.useEffect(() => {
    const handleScroll = () => {
      const distantBottom = Math.abs(
        document.documentElement.offsetHeight -
          document.documentElement.clientHeight -
          window.scrollY
      );

      if (distantBottom < 1) {
        // 触底
        setList((prev) => [...prev, ...getData()]);
      }
    };
    window.addEventListener('scroll', handleScroll);
    return () => window.removeEventListener('scroll', handleScroll);
  }, []);

  return (
    <Recycle>
      {list.map((item, index) => (
        <RecycleItem key={index} style={{ height: 350, marginBottom: '20px' }}>
          <div style={{ height: 350, backgroundColor: 'skyblue' }}>{index}</div>
        </RecycleItem>
      ))}
    </Recycle>
  );
};
const root = createRoot(document.getElementById('root')!);
root.render(<App />);

Recycle API

参数 说明 类型 默认值 版本
throttleTime 节流时间 number 60

RecycleItem API

参数 说明 类型 默认值 版本
className 自定义类名 string -
style 自定义行内样式 React.CSSProperties -
itemEstimatedHeight 每一项的 item 占位高度,单位:px,主要是当 item 高度都一样时,可以不需要先渲染出每一项 item 后去拿高度,节省 dom 渲染计算时间,若不传则会自动去拿高度 number -

注意

若是在 item 项 children 里设置 margin,由于 wrapper 拿不到包含子项和 margin 值,会导致滚动后拿到的 height 不含 margin,因此若需设置 margin,则在 RecycleItem 以样式属性传入即可。