|
@@ -1,8 +1,8 @@
|
|
|
import {createPageContext, createSearchContext, usePage, useTableSearch} from '@hooks';
|
|
|
import {BaseListResult, ListParams, OriginalListParams} from '@models';
|
|
|
import {useQuery} from '@tanstack/react-query';
|
|
|
-import {jumpToPrevPage} from '@utils';
|
|
|
-import {useEffect, useState} from 'react';
|
|
|
+import {jumpToPrevPage, shallowEqual} from '@utils';
|
|
|
+import {useEffect, useRef, useState} from 'react';
|
|
|
|
|
|
type UseQueryListResult<D> = [
|
|
|
{
|
|
@@ -31,10 +31,28 @@ export function useQueryList<
|
|
|
): UseQueryListResult<R> {
|
|
|
const [count, setCount] = useState(0);
|
|
|
const [{page, pageSize}, {onCurrentPageChange}] = usePage(pageContext);
|
|
|
+ const prevData = useRef<R[]>([]);
|
|
|
+ const prevParams = useRef(params);
|
|
|
|
|
|
- const {data, isFetching, refetch} = useQuery<R[]>(
|
|
|
+ const {data = [], isFetching, refetch} = useQuery<R[]>(
|
|
|
[queryFn.name, page, pageSize, ...Object.values(params)],
|
|
|
async function() {
|
|
|
+ /**
|
|
|
+ * 当参数发生改变说明请求内容发生变化
|
|
|
+ * 如果当前页码不为1需要跳转到第1页查询
|
|
|
+ */
|
|
|
+ if (page !== 1 && !shallowEqual(prevParams.current, params)) {
|
|
|
+ prevParams.current = params;
|
|
|
+ onCurrentPageChange(1);
|
|
|
+ return prevData.current;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 有可能参数发生变化但是页码为1 第一步不会拦截
|
|
|
+ * 这里确保参数是最新的参数
|
|
|
+ */
|
|
|
+ prevParams.current = params;
|
|
|
+
|
|
|
const data = await queryFn({
|
|
|
...params,
|
|
|
page: page.toString(),
|
|
@@ -43,18 +61,19 @@ export function useQueryList<
|
|
|
|
|
|
if (data.msg === '200') {
|
|
|
// 当页面只有一个数据的时候 删除了页码改为前一个 但是数据请求还是当前页码
|
|
|
- // 需要判断当前页码是否无数据并且大于1 满足时跳转到前一个页面
|
|
|
+ // 需要判断当前是否无数据并且页码大于1 满足时跳转到前一个页面
|
|
|
jumpToPrevPage({data: data.data.list, current: page, onPageChange: onCurrentPageChange});
|
|
|
|
|
|
setCount(data.data.total);
|
|
|
|
|
|
- return data.data.list;
|
|
|
+ return (prevData.current = data.data.list);
|
|
|
}
|
|
|
|
|
|
return [];
|
|
|
},
|
|
|
{
|
|
|
- initialData: [],
|
|
|
+ placeholderData: [],
|
|
|
+ keepPreviousData: true,
|
|
|
},
|
|
|
);
|
|
|
|