interface Item { id: number; name: string; }
interface Data { data: Item[]; total: number; }
interface FormState { name: string; gender: string; color: string[]; }
const ref = useRef<HTMLDivElement>(null) // 用于探底检测的目标元素,仅滚动加载需要
const {
list, // fetcher 返回的数据组成返回值列表,Data[]
fullList, // fetcher 返回的数据里的列表展开后组成的项目列表,Item[]
form, // 表单状态和操作
selection, // 多选状态和操作
paginationState, // 分页状态,请求的页码信息
loading, // 加载状态
isLoadDone // 是否加载完毕
} = useInfiniteList<Data, Item, FormState>({
target: ref, // 用于探底检测的目标元素,仅滚动加载需要
fetcher: fetchPagination, // 请求数据的函数
mapFullList: (d) => d.data, // 映射数据列表的 map 函数
canLoadMore: (previousData, dataList, fullList) => {
if (!previousData) return true // 无上次请求结果,则为首次加载
// 当前列表长度小于总数时,可以继续加载,否则不再加载
return fullList.length < previousData.total
},
form: { // 配置 useForm
initialValue: {
name: '',
gender: 'Boy',
color: ['Red'],
},
},
pagination: { pageSize: 10 }, // 配置 usePagination
immediateQueryKeys: ['color', 'gender'], // 立即查询的表单字段
})
return (
<div>
<MyForm form={form} />
<div ref={ref} className="h-360px overflow-scroll">
<MyInfiniteScrollList list={fullList} />
</div>
</div>
)