12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import React from 'react';
- import Taro from '@tarojs/taro';
- import { View } from '@tarojs/components';
- import VirtualList from '@tarojs/components/virtual-list';
- import { Cell, Loading } from '@antmjs/vantui';
- import useRequest from '@/utils/useRequest';
- import { getBoundList } from '@/services/bind';
- import Item from './Item';
-
- const Row = (props) => {
- const { data, index } = props;
- const item = data[index];
- const onClick = () => Taro.navigateTo({ url: `/pages/index/index?id=${item.serialNo}` });
-
- return (
- <Item data={item} onClick={onClick} />
- );
- }
-
- export default (props) => {
-
- const [pageInfo, setPageInfo] = React.useState({ current: 0, size: 10, total: 0, page: 0 });
- const [list, setList] = React.useState([]);
- const [loading, request] = useRequest(getBoundList);
-
- const height = 500;
- const itemSize = 100;
- const dataLen = list.length;
-
- // 所有数据读取完毕
- const isFinished = pageInfo.current > 0 && pageInfo.current * pageInfo.size >= pageInfo.total;
-
- const queryData = (params) => {
- request(params).then(res => {
- const { records, ...page } = res;
- if (page.current === 1) {
- setList(records || []);
- } else {
- setList(list.concat(records || []));
- }
- setPageInfo(page);
- }, []);
- };
-
- const onScroll = ({scrollDirection, scrollOffset}) => {
-
- if (
- // 数据还有
- !isFinished &&
- // 避免重复加载数据
- !loading &&
- // 只有往前滚动我们才触发
- scrollDirection === 'forward' &&
- // 5 = (列表高度 / 单项列表高度)
- // 100 = 滚动提前加载量,可根据样式情况调整
- scrollOffset > ((dataLen - Math.floor(height / itemSize) ) * itemSize - 50)
- ) {
- queryData({ pageNum: pageInfo.current + 1 , pageSize: 6 })
- }
- }
-
- return (
- <View>
- <VirtualList
- height={height}
- itemData={list}
- itemCount={dataLen}
- itemSize={itemSize}
- width="100%"
- onScroll={onScroll}
- >
- {Row}
- </VirtualList>
- {
- loading && <Loading />
- }
- {
- isFinished && <View className="finish-tip">我是有底线的 ~</View>
- }
- </View>
- )
- }
|