上拉加载下拉刷新采用react-weui组件, 适用于微信浏览器环境(别的环境没测试)。
/* 上拉加载下拉刷新 */
import React, { useCallback } from "react";
import { useGetList } from "~/hooks";
import NoData from "~/components/noData";
// @ts-ignore
import { PullToRefresh, InfiniteLoader } from "react-weui";
import styles from "./index.module.less";
interface IProps {
url?: string;
itemContent?: any;
noDataContent?: any;
}
const PageRefresh = ({
url = "",
itemContent = {} as any,
noDataContent = {} as any,
}: IProps) => {
// 获取数据列表(封装的获取请求)
const { noData, noMore, list, fetchList } = useGetList([], url, {
isMount: true,
});
const onRefresh = useCallback(() => fetchList(1), [fetchList]);
return (
<div className={styles.refresh}>
{noData ? (
<NoData {...noDataContent} />
) : (
<PullToRefresh
onRefresh={(resolve: any) => {
onRefresh();
setTimeout(() => {
resolve();
}, 1000);
}}
>
<InfiniteLoader
loaderDefaultIcon="没有更多了..."
onLoadMore={(resolve: any, finish: any) => {
if (noMore) {
finish();
} else {
fetchList();
finish();
}
}}
>
{list.map((item: any) => {
return <div key={item.id}>{itemContent(item)}</div>;
})}
</InfiniteLoader>
</PullToRefresh>
)}
</div>
);
};
export default PageRefresh;
引用组件
import PageRefresh from "~/components/pageRefresh";
<PageRefresh
url="/payInfo"
itemContent={(item: any) => (
<div
key={item.id}
className={styles.item}
onClick={() =>
history.push(xxx`)
}
>
<Item item={item} />
</div>
)}
noDataContent={{
title: "暂无消费记录",
img: require("~/images/customerConsumption_noData.png"),
paddingTop: 350,
width: 398,
height: 270,
}}
/>